0

たとえば、次のテーブルポストがあります。

post_id | title
   1       im in Guadalajara and Zapopan
   2       im just in Guadalajara but not in Zapopan

およびテーブル meta_keys

post_id | meta_key
  1         Guadalajara
  1         Zapopan
  2         Guadalajara

Guadalajara と zapopan の両方にある投稿を取得する必要があります。or で内部結合を行うと、両方が得られることがわかりました。

この例では、投稿 1 (ちょうど 1) をスローするクエリを作成することを期待しています。

ありがとう

4

2 に答える 2

1

1 つのアプローチは、二重結合を使用することです。

select
  *
from
  posts p
inner join meta_keys mk1 on p.post_id = mk1.post_id
inner join meta_keys mk2 on p.post_id = mk2.post_id
where
  mk1.meta_key = 'Guadalajara' and
  mk2.meta_key = 'Zapopan'
;
于 2012-06-30T15:30:11.660 に答える
1

以下post_idは、両方にある を取得します

select post_id
  from meta_keys
 where meta_key in ('Guadalajara','Zapopan')
 group by post_id
having count(*) = 2

posts次に、実際の投稿を取得するために参加できます。

select p.*
  from posts as p
  join ( select post_id
           from meta_keys
          where meta_key in ('Guadalajara','Zapopan')
          group by post_id
         having count(*) = 2 ) as m
    on p.post_id = m.post_id
于 2012-06-30T15:30:26.850 に答える