Показать все записи трех таблиц, даже если записи из первой таблицы не во второй или третьей - PullRequest
2 голосов
/ 15 марта 2019

У меня есть три таблицы:

Table1 tipo_producto

id_tipo_producto    nombre
1                   Teléfono
2                   Pendrive
3                   Cargador

Table2 caracteristicas

id_caracteristicas      nombre
1                       Memoria
2                       Camara

Table3 caracteristicas_tipo_producto

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

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

Использовать левое соединение вместо внутреннего соединения

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
1 голос
/ 15 марта 2019
    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 в предложении объединения.Кроме того, попробуйте следовать простому правилу при присоединении к таблицам> Хотя большинство новых версий не будут взорваны из-за этого, всегда ставьте table_whose_columns_are_first_mentioned в качестве первого, а присоединяющуюся таблицу - вторую (если вы этого не сделаете, вы будете одним издостаточно скоро получит конец запутанных запросов)

Сообщите нам, сработал ли запрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...