19

次のフィールドを持つテーブル'meta_data'があります。

  • id
  • post_id
  • meta_key
  • meta_value

のエントリはあるが、のエントリはない各投稿( post_id)のリストをループして表示したいmeta_key='abc'meta_key='def'

基本的に、エントリがあるすべての投稿にはエントリmeta_key='abc'必要meta_key='def'です。meta_key='def'不足しているエントリを追加できるように、リストを生成したいと思います。

4

2 に答える 2

25

これを実現するには、同じテーブルを結合するLEFTOUTERJOIN操作を使用する必要があります。

SELECT a.*
FROM meta_data a
LEFT OUTER JOIN meta_data b ON a.post_id = b.post_id AND b.meta_value = 'def'
WHERE 
a.meta_value = 'abc'
AND b.post_id IS null
于 2012-05-13T23:33:48.587 に答える
11

結合されたテーブルでnullIDを持つ行を検索することにより、一致しないレコードをフィルタリングして、それ自体に外部(左)結合を作成します。

select t1.* 
from meta_data t1
left join meta_data t2 on t2.post_id = t1.post_id and t2.meta_key='def' 
where t1.meta_key='abc'
and t2.id is null
于 2012-05-13T23:33:48.237 に答える