2015-04-03 55 views
-1

我有3個表SQL三分表形成查詢

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的記錄相匹配表

我寫了一個查詢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爲空

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條記錄(查詢沒有條件返回結果)。

+3

儘量避免用逗號分隔連接! – 2015-04-03 12:47:36

+0

這不能是你正在使用的SQL。兩個來自第二屆工會選擇的聲明? – xQbert 2015-04-03 12:56:30

回答

4

您正在選擇distinct idid = 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子句中使用逗號。

+0

我正要寫同樣的! +1 – 2015-04-03 12:48:17

+0

是的結果是有道理的,但我想適用於條件3條記錄,因爲我不想應用條件重複的ID – user1976891 2015-04-03 13:02:23