简体   繁体   English

SQL三表查询格式

[英]SQL THREE TABLE QUERY FORMATION

I have 3 tables 我有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

Now I want a record from TABLE B and C which matches TABLE A ID 现在我想要表B和C中与表A ID匹配的记录

I wrote an query 我写了一个查询

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

it returns 3 records 它返回3条记录

but when I append where condition T.STATUS='A' 但是当我附加条件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'

it returns 2 records 它返回2条记录

again I changed WHERE condition as T.STATUS is null 我再次更改了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

it returns 2 records 它返回2条记录

totally 4 RECORDS but my first query without where condition it returns 3 总共4个记录,但我的第一个查询没有条件返回3

How this mismatch? 这种不匹配如何? I know its my query problem but 我知道它是我的查询问题,但是

I want to apply my where condition to only 3 records(query without where condition returns result). 我想将我的where条件仅应用于3条记录(没有where条件返回结果的查询)。

You are selecting distinct id . 您正在选择distinct id id = 1 has rows with both 'A' and NULL . id = 1行同时具有'A'和NULL The results make sense. 结果很有意义。

I would write the query as: 我将查询写为:

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

Note that your original query had at least one syntax error. 请注意,您的原始查询至少有一个语法错误。 You should learn proper explicit join syntax. 您应该学习正确的显式join语法。 Simple rule: Never use commas in the from clause. 简单规则:请勿在from子句中使用逗号。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM