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 ORVALUE2 的记录(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 值的数量,并仅返回同时具有 Value1Value2 的记录。请注意,这不会排除具有附加值的COLUMN_A 记录,例如Value3Value4。这将需要一种不同类型的查询,需要考虑源表的大小......

【讨论】:

如果当前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更新[重复]

MySQL 从具有重复引用条目的联合表中选择唯一记录

MySQL - 在匹配条件之后返回具有 n 个连续记录的所有记录

MongoDB查询以获取与具有多个值的键匹配的所有文档[重复]

合并两个 csv 文件,为所有匹配的记录添加一个带有标志值的列

除了键入选择 *。在 Mysql [重复]