我正在使用 MySQL 5.5 并且有两个表 T1(ID, NAME) 和 T2(ID, MARKS),以下是表中的数据。
T1的数据
ID NAME
1 A
2 B
3 C
T2的数据
ID MARKS
1 40
5 60
我想要以下结果集
ID NAME MARKS
1 A 40
2 B 0
3 C 0
我们可以编写什么查询来完成上述结果集?
LEFT JOIN
两张表:
SELECT
t1.id,
t1.name,
IFNULL(t2.Marks, 0) AS Marks
FROM T1
LEFT JOIN T2 ON t1.ID = t2.ID;
你应该LEFT JOIN
为这种结果使用一个子句:-)
您的查询将如下所示:
SELECT
ID,
NAME,
COALESCE(MARKS, 0) AS MARKS
FROM T1
LEFT JOIN T2 USING(ID)
请注意,我使用该USING
子句是为了获得比该子句更语义和更紧凑的语法ON
。
在这种情况下,您需要使用LEFT JOIN
连接两个表,因为不能保证ID
on tableT1
将存在于 table 上T2
。检索在左侧LEFT JOIN
表中找到的所有行,无论它在右侧表中是否有匹配记录。
语句中的使用COALESCE
是将NULL
值转换为0
. NULL
列的值上存在的原因是因为表上的某些记录在表T1
上没有匹配的记录,T2
导致列为T2.Marks
空。
SELECT a.ID, a.Name, COALESCE(b.Marks, 0) Marks
FROM T1 a
LEFT JOIN T2 b
ON a.ID = b.ID
要进一步了解有关联接的更多信息,请访问以下链接: