MySQL在连接左3个表时结果为NULL

时间:2016-11-27 22:13:35

标签: mysql sql join

连接3个表时我的结果有问题,因为我在某个地方NULL a应该是数字或空单元格。

我在数据库中的表:


    Table nr 1: rysunek

    id_rys | nazwa_rys   | nazwa_klienta | ...
    3      |01_116230_C0 |PHILIPS
    7      |11_002177_A0 |P&G
    20     |01_101854_B0 |MARS FOOD
    333    |None         |None

    ( + 7 columns which do not use in this query)


    Table nr 2: artykul

    id_art |id_rys |nazwa_art  | id_status | ...
    1      |3      |00_16_1234 | 1
    2      |7      |00_16_1235 | 3
    3      |7      |00_16_1236 | 0
    4      |333    |00_16_1237 | 0

    ( + 10 columns which do not use in this query)


    Table nr 3: statusy

    id_status |kod_status 
    1         |IA     
    2         |NC      
    3         |861  

Mysql查询如下所示:

 SELECT r.nazwa_klienta
      , r.nazwa_rys
      , a.nazwa_art
      , s.kod_status 
   FROM artykul a 
   LEFT 
   JOIN rysunek r 
     ON a.id_rys = r.id_rys 
   LEFT 
   JOIN statusy s 
     ON a.id_status = s.id_status;

结果如下:


    nazwa_klienta | nazwa_rys    | nazwa_art  | kod_status
    NULL          | NULL         | 00_16_1234 | IA 
    NULL          | NULL         | 00_16_1235 | 861
    P&G           | 11_002177_A0 | 00_16_1236 | NULL
    None          | None         | 00_16_1237 | NULL

我需要上面的查询结果如下:


    nazwa_klienta | nazwa_rys    | nazwa_art  | kod_status
    PHILIPS       | 01_116230_C0 | 00_16_1234 | IA 
    P&G           | 11_002177_A0 | 00_16_1235 | 861
    P&G           | 11_002177_A0 | 00_16_1236 |    [empty cell]
    None          | None         | 00_16_1237 |    [empty cell]

我的查询应该怎么样?我尝试了所有的连接方法,但没有一个工作。 也许我应该改变表格的结构?我正在等待某人的某些建议...... :)

1 个答案:

答案 0 :(得分:0)

只要该表中没有与artykul匹配的行,左连接将为您的rysunek列创建空条目。如果你不想列出它们,那么不要在这两个表之间使用外连接(我注意你没有在你想要的输出中列出它们)。

对于其他NULL,来自kod_status,因为它是一个数字列,几乎你的选择是:取null;或者使用COALESCE(kod_status,0)将其转换为0,或者将结果转换为字符串并将其空值转换为空字符串。 mysql命令行工具中有命令行选项(您的输出似乎来自)(参见http://dev.mysql.com/doc/refman/5.7/en/mysql-commands.html)如果符合您的使用模型需求,可能有一种方法可以更改输出空值的方式