我有这张表'post_meta'
post_id name value
87 my_keyname1 randval1
87 my_keyname2 randval2
我想搜索 2 个不同的行并希望返回一个 post_id。我知道“名称”和“值”的所有值,并且我想满足我的查询,即我得到具有 2 个不同“名称”和“值”行的相同 post_id。
SELECT DISTINCT post_id FROM post_meta
WHERE (name = 'my_keyname1' AND value = 'randval1')
OR (name = 'my_keyname2' AND value = 'randval2');
如果您仅针对感兴趣的记录过滤表,然后按分组post_id
,则您想要的结果是那些恰好包含两个不同记录的组:
SELECT post_id
FROM post_meta
WHERE (name = 'my_keyname1' AND value = 'randval1')
OR (name = 'my_keyname2' AND value = 'randval2')
GROUP BY post_id
HAVING COUNT(DISTINCT name, value) = 2
如果保证组内每条记录的名称或值是唯一的,您可以替换为COUNT(DISTINCT name, value)
以COUNT(*)
获得更好的性能。