我正在嘗試在 n 個表中進行選擇并顯示每個表的幾列,但有時我無法匹配某些列,而不是獲取帶有“null”的行,而是省略了整行。
例如:
表_a
| ID | ... |
|---|---|
| 1 | |
| 2 | |
| 3 |
表_b
| ID | 姓名 | ... |
|---|---|---|
| 1 | a1 | ... |
| 2 | b2 | ... |
| 3 | c3 | ... |
表_c
| 姓名 | ... |
|---|---|
| a1 | ... |
然后我進行以下選擇:
select
a.id,
c.name
from
table_a a,
table_b b,
table_c
where
( 1 = 1 )
and a.id = b.id
and b.name = c.name
我得到:
| ID | 姓名 | ... |
|---|---|---|
| 1 | a1 | ... |
我在找:
| ID | 姓名 | ... |
|---|---|---|
| 1 | a1 | ... |
| 2 | 無效的 | ... |
| 3 | 無效的 | ... |
我怎么做?我檢查了一些答案,包括這個,但我不知道如何解決它。
uj5u.com熱心網友回復:
您可以使用OUTER JOIN:
SELECT a.id,
c.name
FROM table_a a
LEFT OUTER JOIN table_b b
ON (a.id = b.id)
LEFT OUTER JOIN table_c c
ON (b.name = c.name)
或者,取決于連接的優先級:
SELECT a.id,
c.name
FROM table_a a
LEFT OUTER JOIN (
table_b b
INNER JOIN table_c c
ON (b.name = c.name)
)
ON (a.id = b.id)
其中,對于樣本資料:
CREATE TABLE table_a (id) AS
SELECT 1 FROM DUAL UNION ALL
SELECT 2 FROM DUAL UNION ALL
SELECT 3 FROM DUAL;
CREATE TABLE table_b (id, name) AS
SELECT 1, 'a1' FROM DUAL UNION ALL
SELECT 2, 'b1' FROM DUAL UNION ALL
SELECT 3, 'c1' FROM DUAL;
CREATE TABLE table_c (name) AS
SELECT 'a1' FROM DUAL;
兩者都會輸出:
| ID | 姓名 |
|---|---|
| 1 | a1 |
| 2 | 無效的 |
| 3 | 無效的 |
小提琴
uj5u.com熱心網友回復:
您應該使用左連接,具體在 oracle 上不確定,但它看起來像:
select
a.id,
c.name
from
table_a a
LEFT JOIN table_b b ON (a.id = b.id)
LEFT JOIN table_c c ON (b.name = c.name)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517923.html
標籤:sql甲骨文
上一篇:過濾SQLWHERE子句
下一篇:無法執行塊
