SQL多表一种条件不合适

时间:2019-02-07 08:40:26

标签: mysql sql

我有这个sql:

SELECT logins.*, users.*, invoices.number
FROM logins,
     users,
     invoices
WHERE logins.user_id = users.id
  AND users.id = invoices.userId;

这是我的陈述的简化版本。现实更加复杂。

何时

  

users.id = invoices.userId

是错误的(因为表格发票不包含带有该userId的行),我需要添加到发票中。number = 0。

2 个答案:

答案 0 :(得分:1)

使用left join返回行,即使找不到发票也是如此。对于这些行,invoices表中的列将为null。在这种情况下,您可以使用coalesce返回0而不是null

SELECT  logins.*
,       users.*
,       COALESCE(invoices.number, 0) AS number
FROM    logins
JOIN    users
ON      logins.user_id = users.id
LEFT JOIN
        invoices
ON      users.id = invoices.userId

答案 1 :(得分:0)

使用显式连接而不是逗号分隔的连接

SELECT logins.*, users.*, invoices.number
FROM logins 
join users on logins.user_id=users.id
join invoices on  users.id=invoices.userId;