我将用下面的场景简单地解释用例。基本上,我想从包含pl001的所有订单的pts\表中找到所有的pts/s
pl_table
========
pl_id | order_id
pl001 order001
pts_table
=========
pts_id | order_id
pts001 order001
pts002 order001
pts002 order002
这是我要问的问题,
SELECT pts_id
FROM pts_table
WHERE pts_table.order_id IN (SELECT DISTINCT(plt.order_id) FROM pl_table
as plt where plt.pl_id=pl001)// to check element equality.
GROUP BY pts_id
HAVING COUNT(DISTINCT pts_table.order_id) = (SELECT COUNT(plt2.order_id)
FROM pl_table as plt2 where plt.pl_id=pl001)//to check size equality.
但不幸的是,这个查询同时返回pts001和pts002,这是不正确的。它应该只返回pts001作为结果!。当我发现这是由于不正确的分组部分。
有人能给我建议如何纠正这个问题或其他更好的方法吗?非常感谢您的帮助。
2条答案
按热度按时间eagi6jfj1#
这很棘手。它是检查匹配的订单数量,而不是不匹配的订单数量。因此,pl002没有进入计数。
aelbi1ox2#
考虑以下几点。。。
返回101
http://sqlfiddle.com/#!2011年9月26日