次の 2 つのビューを結合するにはどうすればよいですか? 私は自分で試しましたが、常に壊れて、繰り返しデータが表示されます。私が考えることができる唯一の回避策は、2 つのビューを作成し、次に 3 つ目のビューを作成して 2 つのビューを結合することでした。問題は、私のアプリケーションでは約 10 個のビューがあり、効率的でもなく、正しく設計されていないことです。
ビュー 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(email SEPARATOR ',') AS email, GROUP_CONCAT(web_site SEPARATOR ',') AS web_sites FROM entity AS LEFT JOIN email ON e.id=emails.entity_id LEFT e.id=web_sites.entity_id GROUP BY id; で web_sites に参加します。
編集: 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