59

テーブル間での SQL クエリの助けをいただければ幸いです。この種の質問が常に寄せられていることは承知していますが、回答を理解するのに十分なほど類似した質問が見つかりません。

table_Aに対応するタグがある行を選択したいtable_B
たとえば、「table_a'chair' とタグ付けされた行を選択」すると、 が返されtable_Cます。

また、はではなく でid一意です。table_atable_b

table_A:             table_B:                  table_C:

id    object         id    tag                 id    object
1     lamp           1     furniture           3     stool
2     table          2     furniture           4     bench
3     stool          3     furniture
4     bench          4     furniture
                     4     chair
                     3     chair

あるいは、データを整理するためのより良い方法はありますか?

4

4 に答える 4

125

最も簡単な解決策は、相関サブ selectです。

select
    A.*
from
    table_A A
where
    A.id in (
        select B.id from table_B B where B.tag = 'chair'
)

または、テーブルを結合して、必要な行をフィルタリングすることもできます。

select
    A.*
from
    table_A A
inner join table_B B
    on A.id = B.id
where
    B.tag = 'chair'

両方をプロファイリングして、データセットでどちらが高速かを確認する必要があります。

于 2011-03-27T02:21:16.897 に答える
8

リンクテーブルを使用して、タグを独自のテーブルにする必要があります。

items:
id    object
1     lamp  
2     table   
3     stool  
4     bench 

tags:
id     tag
1      furniture
2      chair

items_tags:
item_id tag_id
1       1
2       1
3       1
4       1
3       2
4       2
于 2011-03-27T02:22:36.900 に答える
3
select a.id, a.object
from table_A a
inner join table_B b on a.id=b.id
where b.tag = 'chair';
于 2011-03-27T02:21:36.923 に答える