【发布时间】:2021-12-24 14:56:36
【问题描述】:
假设我有这两个表:
表格:tab1
| valA | valB | valC | valD |
|---|---|---|---|
| 1 | 11 | 111 | A |
| 2 | 11 | 333 | A |
| 3 | 44 | 444 | B |
| 3 | 66 | 666 | D |
表格:tab2
| val1 | val2 | val3 | val4 |
|---|---|---|---|
| 1 | 11 | 111 | A |
| 1 | 22 | 222 | A |
| 2 | 44 | 333 | B |
| 3 | 55 | 555 | A |
| 3 | 66 | 666 | D |
我有 3 个案例与 UNION 联合起来。这是代码:
WITH tog AS
(
SELECT* FROM tab1
INNER JOIN tab2
ON ValA = Val1
AND ValB = Val2
UNION
SELECT* FROM tab1
INNER JOIN tab2
ON ValA = Val1
AND ValB <> Val2
AND ValD = Val4
UNION
SELECT* FROM tab1
INNER JOIN tab2
ON ValA = Val1
AND ValC = Val3
AND ValD <> Val4
)
结果是:
表格:tog
| valA | valB | valC | valD | val1 | val2 | val3 | val4 |
|---|---|---|---|---|---|---|---|
| 1 | 11 | 111 | A | 1 | 11 | 111 | A |
| 1 | 11 | 111 | A | 1 | 22 | 222 | A |
| 2 | 33 | 333 | a | 2 | 44 | 444 | B |
| 3 | 66 | 666 | D | 3 | 66 | 666 | D |
所以,我需要 tab1 的表格,但 没有 匹配项,例如:
| valA | valB | valC | valD | val1 | val2 | val3 | val4 |
|---|---|---|---|---|---|---|---|
| 3 | 44 | 444 | B |
我尝试过这样的事情,但我知道这是完全错误的:
SELECT * FROM tab1
LEFT JOIN tog
ON tab1.valA = tog.val1
WHERE tog.val1 IS NULL
我对 SQL 还很陌生,所以如果有任何提示和建议,我将不胜感激。
【问题讨论】: