#mysql #join
#mysql #Присоединиться
Вопрос:
У меня есть три таблицы:
Table1 типо_продукто
id_tipo_producto nombre
1 Teléfono
2 Pendrive
3 Cargador
Характеристики таблицы2
id_caracteristicas nombre
1 Memoria
2 Camara
таблица3характеристика_типо_продукто
id_tipo_producto id_tipo_caracteristica
1 1
1 2
2 1
Я хочу, чтобы результат запроса выглядел следующим образом:
id_tipo_producto nombre caracteristica
1 Teléfono Memoria|Camara
2 Pendrive Memoria
3 Cargador Null or Empty
У меня есть этот запрос, но в результате у меня нет «Cargador»:
SELECT tp.id_tipo_producto, tp.nombre, GROUP_CONCAT(c.nombre ORDER BY c.nombre DESC SEPARATOR '|') AS caracteristicas
FROM caracteristica c
INNER JOIN caracteristicas_tipo_producto ctp ON ctp.id_caracteristica = c.id_caracteristica
INNER JOIN tipo_producto tp ON ctp.id_tipo_producto = tp.id_tipo_producto
GROUP BY ctp.id_tipo_producto
Ответ №1:
Используйте левое соединение вместо внутреннего соединения
SELECT tp.id_tipo_producto, tp.nombre, GROUP_CONCAT(c.nombre ORDER BY c.nombre DESC SEPARATOR '|') AS caracteristicas
FROM tipo_producto tp left JOIN caracteristicas_tipo_producto ctp
on ctp.id_tipo_producto = tp.id_tipo_producto
left join caracteristica c ON ctp.id_caracteristica = c.id_caracteristica
GROUP BY ctp.id_tipo_producto,tp.nombre
Ответ №2:
SELECT
tp.id_tipo_producto,
tp.nombre,
GROUP_CONCAT(c.nombre ORDER BY c.nombre DESC SEPARATOR '|') AS caracteristicas
FROM caracteristica c
INNER JOIN caracteristicas_tipo_producto ctp
ON c.caracteristicas = ctp.id_caracteristica
INNER JOIN tipo_producto tp
ON tp.id_tipo_producto = ctp.id_tipo_producto
GROUP BY ctp.id_tipo_producto
Я удивлен, что ваш оригинал даже прошел без ошибок, потому что вы неправильно написали псевдоним group_concat в предложении join.
Кроме того, старайтесь следовать простому правилу при объединении таблиц>
Хотя большинство более новых версий не взорвутся из-за этого, всегда ставьте table_whose_columns_are_first_mented в качестве первого, а объединяющую таблицу второй
(Если вы этого не сделаете, достаточно скоро именно вы будете получать запутанные запросы)
Сообщите нам, сработал ли запрос