簡體   English   中英

SQL三表查詢格式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM