[英]SQL THREE TABLE QUERY FORMATION
我有3張桌子
table a table b table c
+--------+ ---------+------- ------+-------+
| ID | ID | STATUS| ID | STATUS|
+--------+ ---------+-------- -----+--------+
| 1 | 4 | A | 6 | A
| 2 | 5 | NULL | 5 |NULL
| 3 | 1 | A | 3 | A
| 9 | 2 | NULL | 1 | NULL
現在我想要表B和C中與表A ID匹配的記錄
我寫了一個查詢
SELECT DISTINCT ID
FROM
(SELECT a.ID,b.STATUS FROM A a B b where a.ID=b.ID
UNION
SELECT a.ID,C.STATUS
FROM A a,C C
WHERE a.ID=C.ID) as T
它返回3條記錄
但是當我附加條件T.STATUS ='A'時
SELECT DISTINCT ID
FROM
(SELECT a.ID,b.STATUS FROM A a B b
WHERE a.ID=b.ID
UNION
SELECT a.ID,C.STATUS
FROM A a,C C
WHERE a.ID=C.ID) as T
WHERE T.STATUS='A'
它返回2條記錄
我再次更改了WHERE條件,因為T.STATUS為null
SELECT DISTINCT ID FROM
(SELECT a.ID,b.STATUS
FROM A a,B b
WHERE a.ID=b.ID
UNION
SELECT a.ID,C.STATUS
FROM A a,C C
WHERE a.ID=C.ID) as T
WHERE T.STATUS is null
它返回2條記錄
總共4個記錄,但我的第一個查詢沒有條件返回3
這種不匹配如何? 我知道它是我的查詢問題,但是
我想將我的where條件僅應用於3條記錄(沒有where條件返回結果的查詢)。
您正在選擇distinct id
。 id = 1
行同時具有'A'和NULL
。 結果很有意義。
我將查詢寫為:
SELECT DISTINCT ID
FROM (SELECT a.ID, b.STATUS
FROM A a JOIN
B b
ON a.ID=b.ID
UNION
SELECT a.ID, C.STATUS
FROM A a JOIN
C C
WHERE a.ID = C.ID
) T
請注意,您的原始查詢至少有一個語法錯誤。 您應該學習正確的顯式join
語法。 簡單規則:請勿在from
子句中使用逗號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.