MySQL查询:如何仅当两个键值对同时存在时返回ID 100?
解决方法:匹配同一ID下的多个键值对
原查询无法得到结果的核心原因是:它要求单条记录同时满足两个互斥的键值对条件——一条记录的keyValue不可能既是Event Name又是Event Number,自然查不到数据。以下是三种可行的修改方案:
方案1:分组统计法
先筛选出符合任一目标键值对的记录,再按ID分组,仅保留刚好有2条符合条件记录的ID(说明两个键值对都存在):
SELECT id FROM TABLE_STRINGS WHERE (keyValue = 'Event Name' AND value = 'Day 1') OR (keyValue = 'Event Number' AND value = '1') GROUP BY id HAVING COUNT(*) = 2;
方案2:EXISTS子查询法
找到存在第一个键值对的ID,同时验证该ID也存在第二个键值对的记录:
SELECT DISTINCT id FROM TABLE_STRINGS t1 WHERE keyValue = 'Event Name' AND value = 'Day 1' AND EXISTS ( SELECT 1 FROM TABLE_STRINGS t2 WHERE t2.id = t1.id AND t2.keyValue = 'Event Number' AND t2.value = '1' );
方案3:自连接法
将表与自身连接,分别匹配两个键值对条件,确保同一ID同时拥有这两条记录:
SELECT DISTINCT t1.id FROM TABLE_STRINGS t1 JOIN TABLE_STRINGS t2 ON t1.id = t2.id WHERE t1.keyValue = 'Event Name' AND t1.value = 'Day 1' AND t2.keyValue = 'Event Number' AND t2.value = '1';
内容的提问来源于stack exchange,提问作者user2568374
相关产品推荐
相关产品推荐

