检查 MySQL 数据库中某一列是否包含另一列的所有值
考虑两个表 T1 和 T2,具有以下内容结构:
T1:
personID | stuffID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
1 | 4 |
2 | 1 |
2 | 4 |
3 | 1 |
3 | 2 |
T2:
stuffID |
---|
1 |
2 |
3 |
目标是检索所有 personID 值来自 T1 的与 T2 中的每个 stuffID 值关联的。对于此示例,结果将为 1,因为只有 personID 1 具有 T2 中存在的所有三个 stuffID 的记录。
解决方案:
要实现此目的,我们可以使用分两步过程:
第 1 步:识别匹配记录
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2)
此子查询从 T1 检索所有在 T2 中至少有一个匹配 stuffID 的 personID 值。
第 2 步:检查完整性
GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
这部分按 personID 对步骤 1 的结果进行分组,并检查不同的计数是否相同每个组的 stuffID 值等于 T2 中的 stuffID 值的数量。如果是,则表明 personID 与 T2 中的所有 stuffID 值关联。
最终查询:
结合这两个步骤,最终查询检查列是否包含MySQL 中另一列的所有值是:
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2) GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
以上是如何检查 MySQL 列是否包含另一列的所有值?的详细内容。更多信息请关注PHP中文网其他相关文章!