MySQL - 选择匹配所有值的记录[重复]
Posted
技术标签:
【中文标题】MySQL - 选择匹配所有值的记录[重复]【英文标题】:MySQL - Select Records that matches all values [duplicate] 【发布时间】:2021-05-18 13:46:47 【问题描述】:如果表“XYZ”包含两列作为组合主键,我需要在 COLUMN_B 中选择同时包含 Value1 and
Value2 的记录(结果:ID4)
我尝试使用“IN”查询 select COLUMN_A from XYZ where COLUMN_B in ('VALUE1', 'VALUE2');
,但它返回 COLUMN_B 中包含 VALUE1 OR
VALUE2 的记录(ID1、ID2、ID3、ID4)。
谁能帮我写一个可以做到这一点的 mysql 查询。
COLUMN_A COLUMN_B
ID1 Value1
ID2 Value1
ID3 Value2
ID4 Value1
ID4 Value2
ID5 Value3
ID3 Value3
【问题讨论】:
您的查询包含连接,发布查询和相关表 【参考方案1】:这是在一张非常大的桌子上做这件事的一种混乱方式,但它会实现目标:
SELECT COLUMN_A
FROM xyz
WHERE COLUMN_B IN ('Value1', 'Value2')
GROUP BY COLUMN_A
HAVING COUNT(DISTINCT COLUMN_B) = 2;
这会计算每个 COLUMN_A
记录的不同 COLUMN_B
值的数量,并仅返回同时具有 Value1
和 Value2
的记录。请注意,这不会排除具有附加值的COLUMN_A
记录,例如Value3
和Value4
。这将需要一种不同类型的查询,需要考虑源表的大小......
【讨论】:
如果当前PRIMARY KEY
为(col_a, col_b)
,则添加INDEX(col_b, col_a)
。【参考方案2】:
在建议之前我应该先测试一下,但是呢:
SELECT DISTINCT tableA.column_A
FROM XYZ AS tableA, XYZ AS tableB
WHERE tableA.column_A = tableB.column_A
AND tableA.column_B = 'Value1'
AND tableB.column_B = 'Value2'
【讨论】:
以上是关于MySQL - 选择匹配所有值的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章
MySQL - 在匹配条件之后返回具有 n 个连续记录的所有记录
MongoDB查询以获取与具有多个值的键匹配的所有文档[重复]