有人可以幫助理解為什么左表中的所有值都沒有被列出。我也嘗試過 ANSI 左連接和外連接。
在使用條件時,我也需要將 cust_3 列在最終輸出中 -
b.cust_id != 'cust_3'
可能是一些我無法理解的微不足道的事情,將不勝感激。
架構設定 -
create table cust(cust_id varchar2(10));
create table prod(cust_id varchar2(10), prod_id varchar2(10));
insert into cust values('cust_1');
insert into cust values('cust_2');
insert into cust values('cust_3');
insert into cust values('cust_4');
insert into cust values('cust_5');
insert into prod values('cust_5','prod1');
insert into prod values('cust_5','prod2');
insert into prod values('cust_4','prod2');
insert into prod values('cust_4','prod1');
insert into prod values('cust_1','prod1');
insert into prod values('cust_1','prod2');
insert into prod values('cust_1','prod');
insert into prod values('cust_1','prod3');
insert into prod values('cust_2','prod3');
insert into prod values('cust_2','prod1');
insert into prod values('cust_2','prod4');
insert into prod values('cust_2','prod6');
insert into prod values('cust_2','prod8');
insert into prod values('cust_2','prod7');
insert into prod values('cust_2','prod9');
commit;
select a.cust_id,b.prod_id from cust a, prod b where a.cust_id=b.cust_id( ) and b.cust_id != 'cust_3';
CUST_ID PROD_ID
---------- ----------
cust_5 prod1
cust_5 prod2
cust_4 prod2
cust_4 prod1
cust_1 prod1
cust_1 prod2
cust_1 prod
cust_1 prod3
cust_2 prod3
cust_2 prod1
cust_2 prod4
cust_2 prod6
cust_2 prod8
cust_2 prod7
cust_2 prod9
15 rows selected.
我正在尋找的輸出 -
CUST_ID PROD_ID
---------- ----------
cust_5 prod1
cust_5 prod2
cust_4 prod2
cust_4 prod1
cust_1 prod1
cust_1 prod2
cust_1 prod
cust_1 prod3
cust_2 prod3
cust_2 prod1
cust_2 prod4
cust_2 prod6
cust_2 prod8
cust_2 prod7
cust_2 prod9
cust_3 NULL
uj5u.com熱心網友回復:
您的最終過濾條件b.cust_id != 'cust_3'意味著它只會找到條件為真的行并且NULL(當連接未找到匹配時,這些行將是OUTER)永遠不會不等于任何內容,因此它可以有效地將您的查詢從 a 轉換為LEFT OUTER JOINa INNER JOIN。
如果要修復它,請將過濾器添加到左外連接條件:
select a.cust_id,
b.prod_id
from cust a,
prod b
where a.cust_id = b.cust_id( )
and b.cust_id ( ) != 'cust_3';
而且,更好的是,使用 ANSI 連接語法:
select a.cust_id,
b.prod_id
from cust a
LEFT OUTER JOIN prod b
ON ( a.cust_id = b.cust_id
AND b.cust_id != 'cust_3' );
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/483088.html
標籤:甲骨文
上一篇:獲取具有相同值的id
