Mysql 基于连接条件的条件内部连接或左连接

Mysql 基于连接条件的条件内部连接或左连接,mysql,sql,join,left-join,inner-join,Mysql,Sql,Join,Left Join,Inner Join,我有一个问题 SELECT users.email AS email, addons.sku AS sku, addons.quantity as quantity, invoices.total as total FROM addons INNER JOIN users ON 1=1 and users.id = addons.user_id LEFT JOIN invoices ON 1=1 AND invoices.user_id = users.id AN

我有一个问题

SELECT
  users.email AS email,
  addons.sku AS sku,
  addons.quantity as quantity,
 invoices.total as total

FROM addons

INNER JOIN users ON 1=1
  and users.id = addons.user_id

LEFT JOIN invoices ON 1=1
  AND invoices.user_id = users.id
  AND invoices.status != 3
以下是我需要做的事情:

  • 如果用户根本没有发票,我们应该将其包含在
    总计中,并返回
    NULL
  • 如果用户的发票状态为
    !=3
    我们应该包括它们
  • 如果发票存在且状态为3,则应将其排除在外
这就像我同时需要
内部连接
左连接

我如何才能做到这一点?

这就是您需要的:

SELECT
  users.email AS email,
  addons.sku AS sku,
  addons.quantity as quantity,
  invoices.total as total
FROM addons
INNER JOIN users
  ON users.id = addons.user_id
LEFT JOIN invoices 
  ON invoices.user_id = users.id
WHERE invoices.status IS NULL OR invoices.status != 3
说明:

  • 结果中包括没有发票的用户,发票总额为“空”。这就是左连接的作用
  • 具有发票状态的用户!=包括3个,他们的发票也包括在内。因此,将其添加到where子句中(记住,
    status
    可能是
    NULL
    ,因为上面的
    LEFT JOIN
  • 不包括发票状态为3的用户。使用
    WHERE
    子句执行此操作

现在,如果存在状态为3的发票,它仍会显示在结果中。如果我用“内”替换“左”,它的行为就像我描述的一样:“件,爱,口香糖”