我需要从表A中获得匹配的记录,这些记录也位于表B中。但是我不知道是否可以在一个查询中做到这一点。
表A
id | order_id | title
----------------------------------
1 | 1114 | Product 1
2 | 1115 | Product 1
3 | 1115 | Product 2
4 | 1116 | Product 1
5 | 1117 | Product 3
6 | 1118 | Product 4
7 | 1118 | Product 5
表B
id | order_id | a_id | title
----------------------------------
1 | 2221 | 1 | Product 1
2 | 2222 | 2 | Product 1
3 | 2222 | 3 | Product 2
4 | 2223 | 7 | Product 5
现在,我需要order_id
表A中的所有值,其中所有产品也在表B中。所以这将导致:
1114
1115
1116失败,因为没有b.a_id
值4
1117失败,因为没有b.a_id
值5
1118失败,因为两个6
AND7
都不在b.a_id
我试过了INNER JOIN
,但这也会返回1118
。我也尝试了LEFT JOIN
with WHERE b.a_id IS NULL
,但这是完全相反的。所以我尝试了一个RIGHT JOIN
,但是也返回了1118
。
请参阅此SQL Fiddle。
我希望我明确了我的目标,并且很好奇是否可以通过一个查询来管理。
它不是完美的,但是它确实会通过SQL Fiddle为您的现有数据返回正确的结果。也许您可以以此为起点?
SELECT a.order_id, count(distinct a.id) as aCount, count(distinct b.a_id) as bCount
FROM a
LEFT JOIN b ON a.id = b.a_id
GROUP BY a.order_id
HAVING aCount = bCount;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句