MySQL:如何在列中选择具有某些值的 ID [重复]
Posted
技术标签:
【中文标题】MySQL:如何在列中选择具有某些值的 ID [重复]【英文标题】:MySQL: how to select ID's with certain values in column [duplicate] 【发布时间】:2018-05-14 10:57:59 【问题描述】: +-----------+--------------+----------+--------+
| ID | Package | Date | Amount |
+-----------+--------------+----------+--------+
| 1 | 2 |2000/09/10| 2000 |
+-----------+--------------+----------+--------+
| 1 | 4 |2002/09/20| 3000 |
+-----------+--------------+----------+--------+
| 1 | 3 |2012/10/01| 5000 |
+-----------+--------------+----------+--------+
| 1 | 4 |2012/10/01| 1000 |
+-----------+--------------+----------+--------+
| 2 | 2 |2012/10/01| 2000 |
+-----------+--------------+----------+--------+
| 2 | 4 |2012/10/01| 5000 |
+-----------+--------------+----------+--------+
| 3 | 2 |2012/10/01| 3000 |
+-----------+--------------+----------+--------+
| 3 | 3 |2012/10/01| 5000 |
+-----------+--------------+----------+--------+
例如,我有一张名为“包裹”的表格。
每个 ID 都会在多个日期获得一个包裹,其中包含(数量)物品。当一个 ID 接收超过 1 个包裹时,会有多行具有相同的 ID。
我想选择同时收到包 2 和 4 的所有 ID。在这种情况下,我希望 mysql 返回 ID 1 和 2,因为 ID 3 只有包 2 而没有包 4。
我用过这个查询:
select
ID
from Packages
where Package = 2 and Package = 4
但是当我使用它时,我得到“没有结果”。
有没有办法做到这一点?提前致谢。
【问题讨论】:
【参考方案1】:这是执行此操作的一种规范方法:
SELECT ID
FROM Packages
WHERE Package IN (2, 4)
GROUP BY ID
HAVING COUNT(DISTINCT Package) = 2;
基本思想是只限制包含两个感兴趣的包的行,然后通过 ID
聚合并断言不同的剩余包数为 2。这意味着您的要求得到满足。
【讨论】:
【参考方案2】:选择 ID 从包 where 封装在(2,4)
【讨论】:
kk .. 我认为它错了 我认为这将是一些不应该是正确结果的一部分的行,例如根据 ques 中给定表的 id 为 3 的行。【参考方案3】:您需要进行双重选择。您编写代码的方式是选择值同时为 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)
【讨论】:
【参考方案4】:用途:
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))
【讨论】:
【参考方案5】:SELECT id FROM Packages WHERE Package = 2
INTERSECT
SELECT id FROM Packages WHERE Package = 4;
(仅在末尾分号) 我希望这应该工作
【讨论】:
以上是关于MySQL:如何在列中选择具有某些值的 ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章