使用内部联接sql选择每个值(即使它为null)

时间:2017-10-16 08:35:21

标签: sql select

这是我的sql select statment

SELECT k.name, c.name AS nameCustomer, o.*
                                        FROM offertes o
                                        INNER JOIN customers k
                                        ON o.idCustomer= k.id
                                        INNER JOIN contactperson c
                                        ON o.idContact = c.id;

如果o.idContact不存在,则不会选择任何值。我想要NULL而不是一无所获。它仍然需要SELECT整行!任何人都可以帮助我吗?

PS。我认为内连接(ON o.idContact = c.id);

出错了

3 个答案:

答案 0 :(得分:1)

试试这个:

将您的上一个INNER JOIN替换为LEFT JOIN

使用LEFT JOIN告诉我的主表(offertes)总是返回结果但是如果在辅助表(contactperson)中没有行匹配则返回NULL所有字段表

SELECT k.name, c.name AS nameCustomer, o.*
FROM offertes o
INNER JOIN customers k
ON o.idCustomer= k.id
LEFT JOIN contactperson c
ON o.idContact = c.id;

答案 1 :(得分:0)

您需要一个外部联接。 e.g。

SELECT k.name, c.name AS nameCustomer, o.*
  FROM customers k LEFT OUTER JOIN 
       (offertes o INNER JOIN 
        contactperson c
        ON o.idContact = c.id)
       ON o.idCustomer= k.id;

(我认为在那里' ll会成为联系人的对手,否则你也需要在那里进行外部联接)

答案 2 :(得分:0)

您需要使用外连接重写查询

SELECT k.name, c.name AS nameCustomer, o.*
  FROM customers k
  LEFT OUTER JOIN offertes o ON o.idCustomer = k.id
  LEFT OUTER JOIN contactperson c ON o.idContact = c.id;