假設我有這兩個表,如:
表:tab1
| 纈氨酸 | 值B | 值C | 值 |
|---|---|---|---|
| 1 | 11 | 111 | 一種 |
| 2 | 11 | 333 | 一種 |
| 3 | 44 | 444 | 乙 |
| 3 | 66 | 666 | D |
表:tab2
| 值1 | 值2 | val3 | val4 |
|---|---|---|---|
| 1 | 11 | 111 | 一種 |
| 1 | 22 | 222 | 一種 |
| 2 | 44 | 333 | 乙 |
| 3 | 55 | 555 | 一種 |
| 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
| 纈氨酸 | 值B | 值C | 值 | 值1 | 值2 | val3 | val4 |
|---|---|---|---|---|---|---|---|
| 1 | 11 | 111 | 一種 | 1 | 11 | 111 | 一種 |
| 1 | 11 | 111 | 一種 | 1 | 22 | 222 | 一種 |
| 2 | 33 | 333 | 一種 | 2 | 44 | 444 | 乙 |
| 3 | 66 | 666 | D | 3 | 66 | 666 | D |
所以,我需要 tab1 表但沒有匹配項,例如:
| 纈氨酸 | 值B | 值C | 值 | 值1 | 值2 | val3 | val4 |
|---|---|---|---|---|---|---|---|
| 3 | 44 | 444 | 乙 |
我試過這樣的事情,但我知道這是完全錯誤的:
SELECT * FROM tab1
LEFT JOIN tog
ON tab1.valA = tog.val1
WHERE tog.val1 IS NULL
我對 SQL 很陌生,所以我很感激任何提示和建議。
uj5u.com熱心網友回復:
您想從 tab1 中選擇資料,而在 tab2 中不存在匹配項。
select *
from tab1
where not exists
(
select null
from tab2
where tab1.vala = tab2.val1
and
(
(tab1.valb = tab2.val2) or
(tab1.vald = tab2.val4 and tab1.valb <> tab2.val2) or
(tab1.valc = tab2.val3 and tab1.vald <> tab2.val4)
)
);
或者,如果您需要空的 tab2 列:
select *
from tab1
left outer join tab2
on tab1.vala = tab2.val1
and
(
(tab1.valb = tab2.val2) or
(tab1.vald = tab2.val4 and tab1.valb <> tab2.val2) or
(tab1.valc = tab2.val3 and tab1.vald <> tab2.val4)
)
)
where tab2.val1 is null; -- dismiss the matches
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/365542.html
