【问题标题】:MySQL: how to select ID's with certain values in column [duplicate]MySQL:如何在列中选择具有某些值的 ID [重复]
【发布时间】: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

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

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

【问题讨论】:

    标签: mysql


    【解决方案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;
          

          (仅在末尾分号)
          我希望这应该工作

          【讨论】:

            猜你喜欢
            • 2016-11-05
            • 1970-01-01
            • 1970-01-01
            • 2014-03-18
            • 1970-01-01
            • 2022-07-18
            • 1970-01-01
            • 1970-01-01
            • 2016-09-15
            相关资源
            最近更新 更多