アイテムの1つ、それらのアイテムのタグの1つ、タグIDとタグ名のマッピングの3つのテーブルを考えてみましょう。アイテムとタグのMysql JOIN
アイテム:
ITEM ID ITEM NAME
-------------------
1 Item 1
2 Item 2
3 Item 3
タグ:
ID TAG ID ITEM ID
1 1 1
2 2 1
3 3 1
4 1 2
5 1 3
タグ名:
TAG ID TAG NAME
1 TAG_A
2 TAG B
3 TAG C
だから、唯一の項目1は、タグTAG_A、TAG_BとTAG_Cを持っています。
3つのINNER JOINを実行せずにTAG_A、TAG_B、およびTAG_Cを持つすべてのアイテムを取得するselectはどのようにして行いますか?言い換えれば、私は私が選択を行うと、
INNER JOIN item_tags pt4 ON pt4.item_id = p.item_id AND pt4.tag_id = 1
INNER JOIN item_tags pt13 ON pt13.item_id = p.item_id AND pt13.tag_id = 2
INNER JOIN item_tags pt19 ON pt19.item_id = p.item_id AND pt19.tag_id = 3
を言うことができます知っているが、それは右、非効率的であることを持っていますか?
項目WHERE FROM
SELECT *のようなサブクエリ、およそどのような...とInをITEM_ID(
これを((1、2、3)TAG_ID item_tags
FROMのitem_id を選択)
あなたが機能しなかったことは何をしようとしたのですか? –
すべてのタグを持つ、または指定したタグを持つアイテムを返すクエリを探していますか? – iWantSimpleLife
@iWantSimpleLifeは、指定された3つのタグTAG_A、TAG_B、およびTAG_Cだけを使用します。 –