MySQL 在 ANY 和 ALL 之间进行选择

标签 mysql sql

我有一个 mysql 表 T1,它由两列 INT 组成,将 car_id 链接到 part_id。一个car_id可以有多个part_id,同一个part_id可以对应多个car_id。例如,

car_id   part_id
  1        1  
  1        2  
  1        8  
  2        3  
  3        4  
  4        2  
  4        6  
     ...  
  10       1  
  10       2  
     ...  
  20       1  
  20       2  
  20       8  

为了获取与 car_id = 1 关联的所有 part_id,我运行查询,

SELECT car_id, part_id FROM T1 WHERE car_id=1

并得到结果:

car_id   part_id
  1        1  
  1        2  
  1        8    

现在,我想找到所有剩余的 car_id,这些 car_id 至少包含(比如 >= 2/3)与 car_id=1 关联的 part_id。 (在这个例子中,我应该得到所有 car_ids,它们至少有 2 个 part_ids 1,2, 和 8,如我的 SELECT 查询后所示。所以,我应该得到 car_ids 1,10, 和 20)。

我可以使用以下方法找到包含所有 part_ids 1,2 和 8 的 car_ids:

SELECT car_id, part_id 
      FROM T1 
      WHERE part_id = ALL (SELECT part_id FROM T1 WHERE car_id=1). The result is car_ids 1 and 20.  

我可以使用以下方法找到包含任何值 1,2 和 8 的 car_id:

SELECT car_id, part_id 
       FROM T1 
       WHERE part_id = ANY (SELECT part_id FROM T1 WHERE car_id=1). The result is car_ids 1,4,10 and 20.

如何在 ANY 和 ALL 之间指定一些数字?

最佳答案

要获取所有 car_id 具有 2 个或更多汽车 1part_id

SELECT car_id, 
       group_concat(part_id) as part_ids
FROM T1
WHERE part_id in (SELECT part_id FROM T1 WHERE car_id = 1)
group by car_id
having count(distinct part_id) >= 2

关于MySQL 在 ANY 和 ALL 之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14043875/

相关文章:

javascript - 无法在 Node js中使用util.format()解析mysql准备好的语句中的整数

sql - 如何使用来访问SQL Server数据库。通过设置位置的名称

php - 使用 SUM() 问题选择付款的简单单选按钮

sql - jsonb 内部字段上的 Postgres GROUP BY

MySQL 检索每个不同 ID 的最大行数

mysql - 使用 mysql 和 stdin 的 Ansible 命令失败

mysql - 一步插入mysql复杂数据

mysql - 如何优化 MySQL 查询以进行更新?

Mysql 查询选项表

mysql - 如何根据not条件连接2个表的结果