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と、目的の結果は、正確に 2 つの異なるレコードを含むグループになります。

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 に答える