我有一個簡單的查詢
SELECT table1.no,table1.surname,table2.gender FROM table1 JOIN table2 on table1.no= table2.no WHERE table1.no in ('123','456','789','123')
所以當這個查詢運行并回傳輸出時,它只顯示 3 行
table1.no table1.surname table2.gender
123 sss m
456 aaa f
789 qqq m
但我希望輸出重復如下
table1.no table1.surname table2.gender
123 sss m
456 aaa f
789 qqq m
123 sss m
有沒有辦法我可以做到這一點
uj5u.com熱心網友回復:
傳入集合而不是使用IN過濾器:
SELECT t1.no,
t1.surname,
t2.gender
FROM table1 t1
INNER JOIN table2 t2
ON (t1.no = t2.no)
INNER JOIN TABLE(SYS.ODCINUMBERLIST(123,456,789,123)) l
ON (t1.no = l.COLUMN_VALUE);
其中,對于樣本資料:
CREATE TABLE table1 (no, surname) AS
SELECT 123, 'm' FROM DUAL UNION ALL
SELECT 456, 'f' FROM DUAL UNION ALL
SELECT 789, 'm' FROM DUAL;
CREATE TABLE table2 (no, gender) AS
SELECT 123, 'm' FROM DUAL UNION ALL
SELECT 456, 'f' FROM DUAL UNION ALL
SELECT 789, 'm' FROM DUAL;
輸出:
不 姓 性別 123 米 米 456 F F 789 米 米 123 米 米
db<>在這里擺弄
uj5u.com熱心網友回復:
我認為 Oracle 中的默認連接型別是 INNER JOIN,它將洗掉重復項。嘗試將 JOIN 切換為 LEFT JOIN:
SELECT table1.no,table1.surname,table2.gender FROM table1 LEFT JOIN table2 on table1.no= table2.no WHERE table1.no in ('123','456','789','123')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426880.html
