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
Альтернативно, есть ли лучший способ организовать данные?
Ответы
Ответ 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';