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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

我不能在列中添加具有 2 个相同值的行

如何计算某些值在 SQL 表中出现的次数并在列中返回该数字?

在选择框中选择不同的值和 id

PySpark:如何在列中使用 Or 进行分组

在列中检索大值的更快方法

如何使用 Pandas 在列中添加值的超链接?