我有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的记录,它与TABLE 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为空
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个RECORDS,但我的第一个查询没有where条件它返回3
这种不匹配怎么样?我知道它的查询问题但是
我想将where where条件应用于只有3条记录(没有where条件返回结果的查询)。
答案 0 :(得分:4)
您正在选择distinct id
。 id = 1
的行包含“A”和“{1}}。结果很有意义。
我会将查询写成:
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
语法。简单规则:切勿在{{1}}子句中使用逗号。