如果要获取 sales 表中没有相关值的所有购买,可以使用LEFT JOIN
:
select
p.purchase_id
from
purchase as p
left join sale as s on p.purchase_id = s.purchase_id
where
s.purchase_id is null;
当您想从一个表中获取数据时,即使另一个相关表中的数据不存在, “单边”连接 ( LEFT JOIN
, ) 也很有用。RIGHT JOIN
当然,这意味着当第二个表中没有相关数据时,您可以从一个表中过滤数据。
希望这可以帮助。
查看您更新的问题和评论,我认为您希望不使用所有可能的组合。
您需要将其拆分为两个步骤:
- 首先,您需要
purchase_id
和sale_id
值的所有可能组合(这两个集合的“笛卡尔积”)。
- 然后你需要得到所有已经使用的组合。
- 最后,您需要排除所有已使用的组合。
这可以使用子查询来完成。
步骤1。
select distinct p.purchase_id, s.product_id from purchase as p, sale as s;
第 2 步。(您的查询)
select distinct
purchase_id, product_id
from
purchase as p
inner join sale as s
on (p.purchase_id = s.purchase_id and p.product_id = s.product_id);
第 3 步。把它们放在一起
select
a.*
from
(select distinct p.purchase_id, s.product_id from purchase as p, sale as s) as a
left join (
select distinct
purchase_id, product_id
from
purchase as p
inner join sale as s
on (p.purchase_id = s.purchase_id and p.product_id = s.product_id)
) as e on (a.purchase_id = e.purchase_id and a.product_id = e.product_id)
where
e.purchase_id is null and e.product_id is null;