我基本上这里有完全相同的问题:MySQL视图:连接表而不会导致数据在每一行上重复?
SQL View: Join tables without causing the data to duplicate on every row?
除非他使用SQL这个问题,而我用mysql。我想知道如果相同的查询是可能的在MySQL中。如果是这样,我可能会有错误的语法?
我试图做类似
select a.name as account_Name,
p.description as property_DESCRIPTION,
p.address as property_ADDRESS,
null as vehicles_DESCRIPTION,
null as vehicles_MAKE,
null as vehicles_MODEL
from Accounts a
inner join Properties p
on a.accountid = p.accountid
UNION ALL
select a.name as account_Name,
null as property_DESCRIPTION,
null as property_ADDRESS,
v.description as vehicles_DESCRIPTION,
v.make as vehicles_MAKE,
v.model as vehicles_MODEL
from Accounts a
inner join vehicles v
on a.accountid = v.accountid
这里是我的实际代码:
SELECT user.first_name, user.last_name, upi.image_id, NULL AS friends.friend_user_id FROM user
INNER JOIN user_profile_images as upi ON (user.user_id = upi.user_id)
UNION
SELECT user.first_name, user.last_name, NULL AS upi.image_id, friends.friend_user_id FROM user
INNER JOIN friends ON (user.user_id = friends.user_id)
WHERE user.user_id = '$profile_id'
在那里我有3个表:用户,user_profile_images,和朋友。 user_profile_images和朋友都通过user_id与用户相关。因此,用户可以拥有多个配置文件图像以及多个好友条目。如果它没有意义,我可以发布表格图。但是我想要的基本上是所有信息的视图,如果它们不适用于整体视图,则字段为NULL。
如果我做2个表,无论是与用户和user_profile_images,或用户和朋友查询时,我得到想要的结果,但加入了第三个表给我重复行。
SQL是一种语言,其中MySQL是一种特殊的实现。没有什么是“只是SQL”。当你做'union all'时,你强制mysql返回联合查询中的所有行。删除'all'关键字和mysql为你删除重复的行。 – 2012-03-12 01:51:40
还阅读左/右连接,因为它们有时可能是更好的解决方案。 – Shomz 2012-03-12 01:56:58
你的“实际代码”可能会给出错误,因为你在每个表中没有相同的列数 - 第二个“SELECT”中有'upi.image_id',但不是第一个。 – 2012-03-12 03:46:24