如何加入以下兩個視圖?我自己嘗試過,但他們總是打破,並顯示重複的數據。我能想到的唯一工作是創建兩個視圖,然後是第三個視圖來加入這兩個視圖。問題是,對於我的應用程序,我將有大約10個視圖,這是不高效,也沒有正確設計。SQL如何將這三個視圖合併爲一個?
視圖1
SELECT e.id, e.name, GROUP_CONCAT(email SEPARATOR ', ') AS array_emails
FROM entity AS e
LEFT JOIN emails ON e.id=emails.entity_id
GROUP BY id;
視圖2
SELECT e.id, e.name, GROUP_CONCAT(web_site SEPARATOR ', ') AS array_web_sites
FROM entity AS e
LEFT JOIN web_sites ON e.id=web_sites.entity_id
GROUP BY id
視圖3(此視圖聯接視圖1和2一起)
SELECT e.id, e.name, view_web_sites.array_web_sites, view_emails.array_emails
FROM entity AS e
LEFT JOIN view_web_sites ON e.id=view_web_sites.id
LEFT JOIN view_emails ON e.id=view_emails.id
GROUP BY id
這是我原來的看法,它沒有正常工作。這些值會重複。
原始 - 碎視圖 SELECT e.id,e.name,GROUP_CONCAT(電子郵件分離器 ' ')如電子郵件, GROUP_CONCAT(WEB_SITE分離器',')AS web_sites 從實體爲E LEFT JOIN電子郵件ON e.id = emails.entity_id LEFT JOIN web_sites ON e.id = web_sites.entity_id GROUP BY id;
編輯: 我已經在select語句中探索了獨特的參數,這非常有用。然而,在一張表中我有一個二進制列,不同的參數「擦除」這個值,使列無效。對此有何建議?
編輯#2(修正): 我設法解決任何人可能面臨類似問題的問題。
SELECT entity.id, entity.name,
(SELECT GROUP_CONCAT(emails.email) FROM emails WHERE entity.id=emails.entity_id) AS emails_array,
(SELECT GROUP_CONCAT(web_sites.web_site) FROM web_sites WHERE
entity.id=web_sites.entity_id) AS websites_array
FROM entity
ORDER BY id
感謝您的回覆,我已經測試了不同的參數。它工作的很好,但唯一的問題是,我有一個表中有一個二進制值的列,當我使用不同它會被「擦除」。 有什麼建議嗎? – Gregor
「擦除」是什麼意思? –
以及可以說我有4條記錄,其中具有二進制值的列, 記錄1:0 記錄2:0 記錄3:0 記錄4:1 與GROUP_CONCAT沿不同參數()將其轉換到0:1。而不是0,0,0,1(由於不同的arg。) 但問題是,當我沒有明確的價值,我的輸出是0,0,0,1,0, 0,0,1,0,0,0,1(循環3次,因爲我還有其他表格),這就是爲什麼對我有用的唯一解決方案是爲每個表格創建一個視圖,然後將所有在最後的觀點中再次一起看待這些觀點。 – Gregor