Подтвердить что ты не робот

SQL: выберите из одной таблицы критерии соответствия в другой?

Я бы очень признателен за помощь в SQL-запросе между таблицами. Я понимаю, что такого рода вещи задают постоянно, но я не могу найти достаточно подходящий вопрос, чтобы понять ответы.

Я хочу выбрать строки из table_A, которые имеют соответствующий тег в table_B.
Так, например, "select rows from table_A, помеченные тегом" chair ", вернут table_C.

Кроме того, id является уникальным в table_A, а не в table_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

Альтернативно, есть ли лучший способ организовать данные?

4b9b3361

Ответ 1

Простейшим решением будет коррелированный выбор sub:

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'

Вы должны просмотреть профиль и посмотреть, что быстрее в вашем наборе данных.

Ответ 2

Вы должны сделать теги своей таблицей со ссылкой.

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

Ответ 3

select a.id, a.object
from table_A a
inner join table_B b on a.id=b.id
where b.tag = 'chair';