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