You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL技术问题:如何筛选同时拥有Package 2和4的ID?

解决方法:筛选同时拥有Package 2和4的ID

你原来的查询select ID from Packages where Package = 2 and Package = 4之所以返回空结果,是因为单条记录里的Package字段不可能同时等于2和4——这个条件在任何情况下都不成立,自然查不到数据。下面给你几种可行的方案:

方案1:分组+Having(最常用的方法)

这种方法先筛选出目标Package的记录,再通过分组统计确保每个ID同时拥有两个Package:

SELECT ID
FROM Packages
WHERE Package IN (2, 4)  -- 只保留Package为2或4的记录
GROUP BY ID
HAVING COUNT(DISTINCT Package) = 2;  -- 要求该ID有2种不同的目标Package

这里用COUNT(DISTINCT Package)是为了避免同一个ID多次收到同一个Package(比如你的数据里ID1有两条Package4的记录)导致计数错误,确保确实同时拥有2和4两种。

方案2:自连接

通过将表和自身连接,匹配同一个ID下分别包含Package2和4的记录:

SELECT DISTINCT p1.ID
FROM Packages p1
JOIN Packages p2 ON p1.ID = p2.ID
WHERE p1.Package = 2 AND p2.Package = 4;

DISTINCT用来去除重复的ID结果,因为同一个ID可能有多组匹配的记录。

方案3:子查询嵌套

先找出所有拥有Package4的ID,再从中筛选出同时拥有Package2的ID:

SELECT DISTINCT ID
FROM Packages
WHERE Package = 2
AND ID IN (SELECT ID FROM Packages WHERE Package = 4);

这种写法逻辑直观,适合理解基础子查询的场景。

这三种方法都能得到你想要的结果(ID1和ID2),可以根据你的数据量和实际场景选择使用。

内容的提问来源于stack exchange,提问作者Bingley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:35:38