MySQL:如何在列中选择具有特定值的ID

时间:2018-05-14 10:57:59

标签: mysql

rsp

例如,我有一个名为'Packages'的表。

每个ID在多个日期都有一个包,其中包含(数量)项目。当ID收到多个包时,会有多个具有相同ID的行。

我想选择已收到Package 2和4的所有ID。在这种情况下,我希望mySQL返回ID 1和2,因为ID 3只有Package 2而不是4.

我使用过这个查询:

sys_write

但是当我使用它时,我得到“没有结果”。

有办法做到这一点吗?提前致谢。

5 个答案:

答案 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;

(分号仅在结尾处)
我希望这应该有效