0

我正在使用 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

我们可以编写什么查询来完成上述结果集?

4

3 回答 3

4

LEFT JOIN两张表:

SELECT
  t1.id,
  t1.name,
  IFNULL(t2.Marks, 0) AS Marks
FROM T1 
LEFT JOIN T2 ON t1.ID = t2.ID;

SQL 小提琴演示

于 2013-04-01T13:17:57.780 回答
3

你应该LEFT JOIN为这种结果使用一个子句:-)

您的查询将如下所示:

SELECT 
    ID, 
    NAME, 
    COALESCE(MARKS, 0) AS MARKS
FROM T1
    LEFT JOIN T2 USING(ID)

请注意,我使用该USING子句是为了获得比该子句更语义和更紧凑的语法ON

于 2013-04-01T13:25:22.713 回答
1

在这种情况下,您需要使用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

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-04-01T13:18:09.920 回答