我有三个表:
表1 tipo_producto
id_tipo_producto nombre
1 Teléfono
2 Pendrive
3 Cargador
表2特征
id_caracteristicas nombre
1 Memoria
2 Camara
表3 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
答案 0 :(得分:2)
使用左联接代替内部联接
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 :(得分:1)
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
令您惊讶的是,您的原著甚至顺利通过了,因为您在join子句中拼写了group_concat别名。 另外,在连接表时尝试遵循简单的规则> 尽管大多数新版本不会因此而崩溃,但始终将table_whose_columns_are_first_提及为第一个,然后将联接表作为第二个 (否则,您将很快成为混乱查询的接收端)
让我们知道查询是否有效