このテーブル「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
と、目的の結果は、正確に 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(*)