如果找不到匹配项,如何附加列数据?

时间:2017-12-26 10:59:28

标签: mysql sql

我有table1和table2如下

表1

first_name | last_name | t1_id

表2

T2_id | color | length

Table1可能具有Table2 id中不存在的id值,但有时可能存在。我想写一个查询,给出以下结果: First_name | last_name | t1_id |颜色|长度 如果在table2中不存在id值,结果应该是:

First_name | last_name | t1_id | color | length
-----------------------------------------------
Johan      | Mike      | 33    |   -   |   -

我的尝试:

SELECT first_name,
       last_name,
       t1_id,
       color,
       length
FROM Table1, Table2
WHERE t1_id = t2_id

但是,如果t1_id的值仅存在于t2_id中,则会显示结果。

5 个答案:

答案 0 :(得分:3)

使用LEFT join来获取第一个表中的所有行,即使它们的关联在第二个表中不存在

SELECT first_name,
       last_name,
       t1_id,
       color,
       length
FROM Table1
LEFT JOIN Table2 ON t1_id = t2_id

如果列为空,您可以使用COALESCE(column,'-')来显示-

SELECT first_name,
       last_name,
       t1_id,
       COALESCE(color,'-'),
       COALESCE(length,'-')
FROM Table1
LEFT JOIN Table2 ON t1_id = t2_id

答案 1 :(得分:2)

使用左连接

SELECT first_name,
       last_name,
       t1_id,
       color,
       length
FROM Table1
LEFT JOIN Table2 ON t1_id = t2_id

答案 2 :(得分:1)

如果找不到正确的表数据,那么你可以在这种情况下使用mysql left join 加入

SELECT t1.first_name,
       t1.last_name,
       t1.t1_id,
       t2.color,
       t2.length
FROM table1  t1
LEFT JOIN table2 t2 
ON t1.t1_id = t2.t2_id;

在这个sql中我使用了别名,但是如果你不想要它那么

SELECT first_name,
       last_name,
       t1_id,
       color,
       length
    FROM table1  
    LEFT JOIN table2  
    ON t1_id = t2_id;

了解更多信息

https://dev.mysql.com/doc/refman/5.7/en/left-join-optimization.html

答案 3 :(得分:1)

您应该使用LEFT JOIN

SELECT *
FROM Table1 LEFT JOIN Table2
ON t1_id = t2_id

答案 4 :(得分:0)

试试这个:

SELECT first_name,
       last_name,
       t1_id,
       color,
       length
FROM Table1, Table2
WHERE t1_id = t2_id(+)

此致 Damodar