mysql - 显示三个表的所有记录,即使第一个表中的记录不在第二个或第三个表中

标签 mysql join

我有三个表:

表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

最佳答案

使用左连接代替内连接

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

关于mysql - 显示三个表的所有记录,即使第一个表中的记录不在第二个或第三个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181712/

相关文章:

mysql - 按两列排序

php - mysql_fetch_array 和 mysql_fetch_row 之间的区别?

PHP - 试图通过for循环将数据插入数据库但只有一行被填充

使用 ServiceStack ORMLite 的 MySql.Data.MySqlClient.MySqlException

php - LEFT JOIN 还是只选择额外的表?

Mysql WHERE X 匹配 Y 和 Z

mysql inner join关联所有元组

MYSQL delete - 表 'USER_TABLE' 被指定两次,既作为 'DELETE' 的目标,又作为单独的数据源

postgresql - PostgreSQL 中 INNER JOIN 查询出现“无主键”错误

mysql - Laravel 5.4 原始连接查询