0

我有这张表'post_meta'

post_id name        value
87      my_keyname1 randval1
87      my_keyname2 randval2

我想搜索 2 个不同的行并希望返回一个 post_id。我知道“名称”和“值”的所有值,并且我想满足我的查询,即我得到具有 2 个不同“名称”和“值”行的相同 post_id。

4

2 回答 2

0
SELECT DISTINCT post_id FROM post_meta
WHERE (name = 'my_keyname1' AND value = 'randval1')
OR (name = 'my_keyname2' AND value = 'randval2');
于 2012-07-04T00:06:43.590 回答
0

如果您仅针对感兴趣的记录过滤表,然后按分组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(*)获得更好的性能。

于 2012-07-04T00:24:02.213 回答