SQL查询,结果来自2个表,1个表多次



我在SQL表中有以下数据。

表1

Jenny
id name
1 John
2 Smith
4账单

差不多了,但您需要一些更改:

select a.id,a.name, b.value as city_1, c.value as city_2 
from table1 as a
left join table2 as b on a.id=b._id and b.value_id=1
left join table2 as c on a.id=c._id and c.value_id=2

基本上,使用左联接是因为在另一个表中并不总是有匹配的记录,但您希望显示第一个表中的所有行。

将条件从where子句移到联接中的on子句可以确保在联接过程中应用这些条件,而不是过滤联接的结果。如果我们将where子句与左联接一起使用,您仍然会看到与现在相同的结果,因为where将在联接之后求值。

另一个答案的问题是同一个表的多个联接。您可以使用单个联接和条件聚合(也称为PIVOT(来完成此操作

select
a.id,
a.name,
max(case when b.value_id = 1 then b.value end) as city_1,
max(case when b.value_id = 2 then b.value end) as city_2 
from table1 as a
left join table2 as b on a.id = b._id
group by
a.id,
a.name;

最新更新