在 SQL 中,union可用于將記錄集(表或查詢)的行附加到具有相同欄位的另一個記錄集。您還可以通過組合兩者的欄位并將null值分配給沒有這些欄位的記錄集中的行的欄位來附加具有不同欄位的記錄集。
但是如果每個記錄集的值都對應于另一個記錄集的鍵呢?然后將欄位與null任一記錄集的所有值組合不會給出正確的結果。
我需要在單個查詢中合并具有不同欄位的兩個記錄集。我的記錄集是查詢,但為了顯示問題,我在這里將它們表示為表。以下是 Access 中的設定:

我需要的是一個資料表,其中包含基于 ID1 和 ID2 的值Data_1以及Data_2它們何時存在的值:
| ID1 | ID2 | 資料_1 | 資料_2 |
|---|---|---|---|
| 1 | 1 | 一種 | X |
| 2 | 1 | 乙 | |
| 3 | 1 | 是 | |
| 4 | 1 | C | Z1 |
| 4 | 2 | Z2 |
我正在嘗試通過執行left joinfrom ID1toID1_1和 to來做到這一點ID1_2。這為我提供了ID11、2 和 3 值的正確輸出。但我無法獲得 . 的兩行的正確輸出ID1 = 4。
例如,SQL:
SELECT ID1, nz(ID2_1, ID2_2) AS ID2, Data_1, Data_2
FROM (ID1 LEFT JOIN Table_1 ON ID1.ID1 = Table_1.ID1_1)
LEFT JOIN Table_2 ON ID1.ID1 = Table_2.ID1_2
WHERE Data_1 Is Not Null OR Data_2 Is Not Null;
給了我兩行ID1 = 4,但第二行是錯誤的:

和 SQL:
SELECT ID1, nz(ID2_1, ID2_2) AS ID2, Data_1, Data_2
FROM (ID1 LEFT JOIN Table_1 ON ID1.ID1 = Table_1.ID1_1)
LEFT JOIN Table_2 ON ID1.ID1 = Table_2.ID1_2
WHERE ID2_1 is not null and ID2_2 is null or
ID2_1 is null and ID2_2 is not null or
ID2_1 = ID2_2;
只給我一行ID1 = 4:

我究竟做錯了什么?我需要做什么才能獲得所需的輸出?
uj5u.com熱心網友回復:
考慮:
SELECT Table_2.ID1_2, Table_2.ID2_2, Table_1.Data_1, Table_2.Data_2
FROM Table_2 LEFT JOIN Table_1 ON (Table_2.ID2_2 = Table_1.ID2_1) AND (Table_2.ID1_2 = Table_1.ID1_1)
UNION
SELECT Table_1.ID1_1, Table_1.ID2_1, Table_1.Data_1, Table_2.Data_2
FROM Table_1 LEFT JOIN Table_2 ON (Table_1.ID2_1 = Table_2.ID2_2) AND (Table_1.ID1_1 = Table_2.ID1_2);
======================
提問者編輯:這個答案非常有效,一旦你得到它,這是顯而易見的事情之一,但當我試圖弄清楚這一點時,我根本沒有想到。所以我想解釋一下它是如何作業的。
首先,表ID1,我不得不left join“d兩全的所有行Table_n包括表,則不需要。
中的兩個查詢中的每union一個都left join從一個Table_n到另一個查詢。這包括左側表的所有行,并Data_m從另一個表的該列插入一個新列,其中包含相應的值(如果它們存在)。這將創建一對可以被union排除的表,并排除重復的行,以產生所需的輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/352897.html
上一篇:DoCmd.RunSQL導致運行時錯誤2342或運行時錯誤3129
下一篇:意外的UserDict行為
