1

私は2つのテーブルを持っています。最初のテーブルはエントリでいっぱいです。2番目の表は、そのエントリが属するカテゴリを定義しています。

表1:

entry_id | title
       1 | Entry1
       2 | Entry2
       3 | Entry3

表2

entry_id | cat_id
       1 | 233
       1 | 234
       1 | 678
       2 | 235
       2 | 453
       2 | 21
       3 | 234
       3 | 233

複数のカテゴリに属する​​すべての投稿の単一のクエリでエントリを選択しようとしています。たとえば、カテゴリID 233および234に属するエントリを返したいと思います。よくわかりませんが、これにはサブクエリが必要だと思います。誰か助けてくれませんか?:)

4

2 に答える 2

9

SQL 結合について学習します。

SELECT * FROM tbl1 JOIN tbl2 USING (entry_id) WHERE cat_id IN (233,234);

sqlfiddleで参照してください。


アップデート

両方のカテゴリのすべてのエントリを選択するには、結合の結果をグループ化し、両方のカテゴリを含むグループのみを選択します。

SELECT   tbl1.*
FROM     tbl1 JOIN tbl2 USING (entry_id)
WHERE    cat_id IN (233,234)
GROUP BY entry_id
HAVING   COUNT(DISTINCT cat_id) = 2

sqlfiddleで参照してください。

が で一意であることがわかっている場合、はCOUNT(DISTINCT cat_id)明らかに (はるかに安価な) に置き換えることができます。COUNT(*)(entry_id, cat_id)tbl2

于 2012-06-29T15:10:00.480 に答える
4

これを試して:

select * from entity e
where exists (select * from category c where c.entry_id=e.entry_id AND c.cat_id=233)
  and exists (select * from category c where c.entry_id=e.entry_id AND c.cat_id=234)

これは、233 と 234の両方に属する行を返します(とにかく、これが私があなたの質問を読んだ方法です。「複数のカテゴリに属する​​」部分を誤解している可能性があります)。

于 2012-06-29T15:10:16.080 に答える