rsp
例如,我有一个名为'Packages'的表。
每个ID在多个日期都有一个包,其中包含(数量)项目。当ID收到多个包时,会有多个具有相同ID的行。
我想选择已收到Package 2和4的所有ID。在这种情况下,我希望mySQL返回ID 1和2,因为ID 3只有Package 2而不是4.
我使用过这个查询:
sys_write
但是当我使用它时,我得到“没有结果”。
有办法做到这一点吗?提前致谢。
答案 0 :(得分:2)
这是一种规范的方法:
SELECT ID
FROM Packages
WHERE Package IN (2, 4)
GROUP BY ID
HAVING COUNT(DISTINCT Package) = 2;
基本思想是仅限制具有两个感兴趣的包的行,然后按ID
聚合并声明不同的剩余包计数为2.这意味着满足您的要求。
答案 1 :(得分:0)
选择 ID 来自包裹 包裹在(2,4)
中答案 2 :(得分:0)
您需要进行双重选择。你编写代码的方式,你选择值同时为2和4的行。这是不可能的,因此你得到的空结果集。
尝试嵌套选择,例如
Select id from packages where id in (select id, package from packages where package='2') and package ='4'
你也应该能够使用交叉。见https://www.techonthenet.com/sql/intersect.php
更简单地说你可以做到
Select id from packages where package in (2,4)
答案 3 :(得分:0)
使用:
select * from packages
where id in (select distinct id
from (select distinct id from packages where package=2) a
join (select distinct id from packages where package=4) b
on (a.id = b.id))
答案 4 :(得分:0)
SELECT id FROM Packages WHERE Package = 2
INTERSECT
SELECT id FROM Packages WHERE Package = 4;
(分号仅在结尾处)
我希望这应该有效