基于联接条件的条件INNER JOIN或LEFT JOIN

时间:2019-01-31 14:55:32

标签: 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
  AND invoices.status != 3

这是我需要做的:

  • 如果用户根本没有发票,我们应该在NULL中将total退还给他们
  • 如果用户的发票状态为!= 3,则应将其包括在内
  • 如果发票存在且状态为3,则应排除它们。

所以就像我同时需要INNER JOINLEFT JOIN

我该如何实现?

1 个答案:

答案 0 :(得分:1)

这就是您需要的:

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

说明:

  • 结果中包括没有发票的用户,发票总额为“空”。这就是LEFT JOIN的目的
  • 发票状态为!= 3的用户包括在内,其发票也包括在内。因此,将其添加到where子句中(请记住,由于上述status的原因,NULL可能为LEFT JOIN
  • 发票状态为3的用户被排除在外。使用WHERE子句