我基本上這裏有完全相同的問題: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