我正在使用 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连接两个表,因为不能保证IDon 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
要进一步了解有关联接的更多信息,请访问以下链接: