我有一张这样的表
ID Type
--- -------
1 17
2 18
3 18
10 16
还有第二张这样的表
ID Month
--- -------
1 Feb
2 Feb
3 Feb
4 Feb
我想选择第二个表中的所有内容,并将其与第一个表中的类型进行匹配。如果它在第一个表中没有匹配的ID,我仍然希望显示它。
现在我正在进行此查询
select t2.id, t2.month, t1.type
from t2, t1
where t1.id = t2.id
它正在给我这个结果
ID MONTH TYPE
1 Feb 17
2 Feb 18
3 Feb 18
但我想要的是这个结果
ID MONTH TYPE
1 Feb 17
2 Feb 18
3 Feb 18
4 Feb 0
如何编写SQL语句,这会给我上述结果?
答案 0 :(得分:1)
您只需要使用LEFT JOIN
- 我也使用COALESCE
为类型返回0 - 您也可以使用IFNULL
:
SELECTt2.id, t2.month, COALESCE(t1.type,0) type
FROM t2 LEFT JOIN t1
ON t1.id = t2.id
答案 1 :(得分:0)
您必须使用外部联接,它为您提供一个表的所有行以及另一个表的连接值。像这样:
select t2.id, t2.month, t1.type
from t2 left outer join t1
on t1.id = t2.id
但是,对于4号feb,类型的值缺失,因此它们为空。
如果这是你需要的,你必须在字段列表中将null映射到0,但我不建议这样做,因为它完全错了。
答案 2 :(得分:0)
SELECT t2.id, t2.month, t2.type
FROM t2 LEFT OUTER JOIN t1
ON t1.id = t2.id
UNION(
SELECT t2.id, t2.month, '0' AS type
FROM t2
EXCEPT
SELECT t2.id, t2.month, '0' AS type
FROM t2 LEFT OUTER JOIN t1
ON t1.id = t2.id )
答案 3 :(得分:0)
您可以制作LEFT JOIN
并使用IFNULL
SELECT table2.id, table2.month, IFNULL(table1.type, 0) as type FROM t2 as table2 LEFT JOIN t1 table1 ON table2.id = table1.id