我在MySQL表package_in_plan
中有以下数据+------------+----------+------+
| package_id | plan_id | opt |
+------------+----------+------+
| 4 | 9 | 0 |
| 35 | 9 | 0 |
| 8 | 9 | 0 |
| 8 | 4 | 0 |
| 4 | 4 | 0 |
| 4 | 16 | 0 |
| 5 | 15 | 0 |
+------------+----------+------+
我希望能够选择package_id 4和8 并且输出应该是plan_id 4。我不希望它输出plan_id 9,因为plan_id 9有package_id 35,plan_id 4没有,所以我希望它具体说明这些package_id请求与plan_id相同。
这是我到目前为止的SQL,并且从那里开始。
Select * from package_in_plan where package_id in(4,8) group by plan_id having count(*) >1;
当然这个没有用。感谢帮助。
答案 0 :(得分:0)
这将有效:
Select *
from package_in_plan
where package_id in(4,8)
AND plan_id NOT IN (SELECT plan_id FROM package_in_plan where package_id not in (4,8))
使用package_id获取所有数据,如8或4,并忽略那些包含plan_id和package_id的数据,而不是8或4。
如果你可以将另一个变量传递给查询,那就像@John Woo所说
Select *
from package_in_plan
where package_id in(4,8)
group by plan_id
having COUNT(distinct package_id) = @num (how many packages you want)