2016-12-27 10 views
-2

ですべての項目を表示するように選択したSQL:ID 1の別の単語項目でそうは、私はテーブルを持って適切なタグ

item(1, 'content of item') 
tags(1, 'bad'), tags(2, 'good'), tags(3, 'best') 
items_tags(1, 2), items_tags(1, 3) 

良いと最高のタグを持っています

item(id_item, content) 
tags(id_tag, tag_name) 
items_tags(id_item, id_tag) 

私はデータを持っています。 sql selectを記述すると、タグが良好で最高のアイテムをすべて表示できますか?

+1

?あなた自身のコードを書こうとしましたか? – dfundako

+0

「good and best' ***」または「good and best」を持っていますか? (しかし、悪い、腐った、または "彼らがチェックした")テーブルに参加することもできます。タグが(good、best)であるタグからCount(distinct Tag_name)を選択すると、Count(*)= Count(*)=#ofTagsinWhereclauseまたはReplace = – xQbert

+0

あなたはどのDBMSを使用していますか? –

答えて

1

シンプルです。 joinsubqueryINここ

SELECT * 
FROM item i 
WHERE i.id_item IN 
    (SELECT it.id_item 
    FROM items_tags it 
    INNER JOIN tags t 
    ON it.id_tag  = t.id_tag 
    WHERE t.tag_name IN ('good', 'best') 
    GROUP BY it.id_item 
    HAVING COUNT(DISTINCT t.tag_name) >= 2 
) t; 

は、サブクエリなしで同等です:あなたは何かを研究している

SELECT i.id_item 
FROM item i 
INNER JOIN items_tags it 
ON i.id_item = it.id_item 
INNER JOIN tags t 
ON it.id_tag  = t.id_tag 
WHERE t.tag_name IN ('good', 'best') 
GROUP BY i.id_item 
HAVING COUNT(DISTINCT t.tag_name) >= 2; 
+0

t.tag_nameにはこれらのi.id_itemsの「Majestic」も含まれていますが、しかし、私たちはOPがまだ望んでいるものがわからない。 – xQbert

+0

私は望んでいたものではないが、答えに感謝します。このクエリはタグ「良い」または「最高の」を持つすべての項目を検索します。タグ 'good'と 'best'の両方がある –

+0

* giggle * thanks Kamil:P – xQbert

関連する問題