1つのクエリで2つの異なるテーブルからすべての電子メールアドレスを選択する必要があります。この目標は、クライアントが行ごとに持っているすべての電子メールアドレスを一覧表示することです。
両方のテーブルの構造は互いに異なります。
表1構造
ID First Name Last Name Email
1 Mike Smith [email protected]
2 Jane Doe [email protected]
表2構造
ID Name Value
1 work_email [email protected]
1 alt_work_email [email protected]
2 school_email [email protected]
2 address 1 123 west main street
2 city Houston
通常、表2の正確な名前がわかっている場合は、LEFT JOINを実行してゴールデンになりますが、そうではありません。
SELECT
tb1.id,
tb1.first_name,
tb1.last_name,
tb1.email as Value,
tb2.value as Value2,
FROM table1 as tb1
LEFT JOIN table2 as tb2 ON tb2.name LIKE '%email%' AND tb2.value LIKE '%@%'
AND tb2.value != '' AND tb2.client_id = tb1.id
上記のクエリが不正確であることはわかっていますが、表1からすべての電子メールアドレスを収集し、NameにTable 2からのWord電子メールが含まれ、それらの電子メールを電子メールアドレスに関連付けられたName値とともに表示するには、このようなものが必要です。表1名前の値は、Eメールの列ヘッダーになります。必要なものの望ましい出力は上記のとおりです。
望ましい出力
ID First Name Last Name Name Value
1 Mike Smith Email [email protected]
1 Mike Smith work_email [email protected]
1 Mike Smith alt_work_email [email protected]
2 Jane Doe Email [email protected]
2 Jane Doe school_email [email protected]
これに関するどんな助けも素晴らしいと非常に高く評価されます!
SELECT id, First_Name, Last_Name, 'Email' Name, Email Value
FROM table1
UNION ALL /* or UNION DISTINCT */
SELECT tb1.id, tb1.First_Name, tb1.Last_Name, tb2.Name, tb2.Value,
FROM table1 tb1
LEFT JOIN table2 tb2
ON tb2.Name LIKE '%email%'
AND tb2.Value LIKE '%@%'
AND tb2.client_id = tb1.id
/* ORDER BY 1 */
PS。 AND tb2.value != ''
条件が過剰です。 falseの場合、AND tb2.Value LIKE '%@%'
もfalseです。