MySQL LEFT JOIN是否在失败时删除比较列?

时间:2018-12-20 01:15:21

标签: mysql database

MySQL表架构:实体(键为entityId),帖子(键为entityId),照片(键为entityId)

相对于合并后的post + photo表,实体将是1:1,因为这些基本上是实体的子类别

sql请求:

SELECT * FROM entity
LEFT JOIN post ON post.entityId = entity.entityId
LEFT JOIN photo ON photo.entityId = entity.entityId

这确实返回完整的架构,但是对于没有照片的实体,返回的entityId为null。没有相应照片的每一行,其entityId设置为null。

问题:在保留所有数据的同时合并这些子组的最干净方法是什么?我确实做到了这一点,方法是只进行一个普通的帖子发布,然后再将其与另一个包含照片的实体进行联合,但是我的解决方案非常混乱,并且可能有更好的方法。

1 个答案:

答案 0 :(得分:0)

您需要明确列出各列。您遇到的问题是这些列具有相同的名称。例如:

SELECT e.*, pid as post_id, ph.id as photo_id
FROM entity e LEFT JOIN
     post p
     ON p.entityId = e.entityId LEFT JOIN
     photo ph
     ON ph.entityId = e.entityId;

如果唯一具有重复ID的列是entityId列,则可以使用USING子句(假设您的数据库支持该子句):

SELECT *
FROM entity e LEFT JOIN
     post p
     USING (entityId) LEFT JOIN
     photo ph
     USING (entityId)