Возможно ли создать запрос? - MySQL
Формулировка задачи:
Здравствуйте!
Есть таблица продуктов - table1, таблица тэгов - table2 и таблица table3, записи которых состоят из ID записи, ID продукта и ID тэга.
Таким образом, конкретному продукту присваиваю тэги. Если продукту с ID N1 нужно присвоить теги с ID N2 и N3, то в
table3 нужно записать 2 записи -
ID, N1, N2
ID, N1, N3
У меня 2 вопроса.
1. правильно ли таким образом создавать связи между таблицами?
2. возможно ли создать запрос, который выведет все записи с таблицы тэгов и еще одно поле, которое =1, если в таблице table3 есть запись с ID данного продукта и ID данного тэга, или =0, если такой записи не найдено.
Решение задачи: «Возможно ли создать запрос?»
textual
Листинг программы
SELECT t2.id , t2.tag_name , SUM(CASE WHEN t3.id IS NOT NULL THEN 1 ELSE 0 END) tag_found FROM table2 t2 LEFT JOIN table3 t3 ON (t3.id_tag = t2.id AND t3.id_prod = :PROD_ID)
Объяснение кода листинга программы
- В данном коде выполняется запрос на выборку данных из таблицы
table2
и её внешнего объединения с таблицейtable3
по полямid_tag
иid_prod
с использованием оператораLEFT JOIN
. - В итоговой выборке присутствуют два поля:
t2.id
иt2.tag_name
, которые соответствуют идентификатору и названию тега из таблицыtable2
. - Также в итоговой выборке присутствует третье поле
tag_found
, которое вычисляется с использованием функцииSUM
и оператораCASE
. Если значение поляt3.id
не равноNULL
, то в полеtag_found
записывается1
, иначе0
. Это поле отображает количество найденных тегов для каждого запися в таблицеtable2
. - В строке
FROM table2 t2
указывается, что выборка данных будет производиться из таблицыtable2
. - В строке
LEFT JOIN table3 t3 ON (t3.id_tag = t2.id AND t3.id_prod = :PROD_ID)
производится объединение таблицtable2
иtable3
по полямid_tag
иid_prod
с использованием оператораON
. Также здесь указывается условие объединения, что запись из таблицыtable3
будет выбираться только в том случае, если её идентификатор равен идентификатору продукта, указанному в переменной:PROD_ID
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д