[英]Record Matching between two tables in oracle
我有下面兩張桌子。
create table main_supplier(file_id number,process_id number,supplier_code
number);
create table addition_supplier(file_id number,process_id number,supplier_code
number);
insert into main_supplier values(1,2,4567);
insert into main_supplier values(1,2,1234);
insert into main_supplier values(1,2,5890);
insert into addition_supplier values(1,2,7890);
insert into addition_supplier values(1,2,1234);
insert into addition_supplier values(1,2,5890);
在上表中,main_supplier 表中的 supplier_code 不應該存在於 addition_supplier 表中的 supplier_code 中。所以我在 plsql 塊中寫了一個 cursor。
cursor c1 select ta.supplier_code
from main_supplier ta
where ta.file_id=1
and ta.process_id= 2
and exists(select 1
from addition_supplier sa
where sa.file_id=ta.file_id
and sa.process_id= ta.process_id
and sa.supplier_code=ta.supplier_code);
open c1;
loop
fetch c1 into a;
if a is not null then
raise error;
end if;
end loop;
以上select查詢是否正確?
查詢本身有效。 真的不知道您想做什么,因為您的查詢結果是:
供應商代碼 |
---|
1234 |
5890 |
這是 EXISTS() 條件的結果——如果這是你要找的,那么,是的,你的 sql 沒問題,你得到了表中不應該存在的行——你將如何處理它們給你。 您的(示例)PL/SQL 代碼將在行的第一行引發錯誤並退出。 但這只是一個有希望的樣本......
測試
WITH
main_supplier (FILE_ID, PROCESS_ID, SUPPLIER_CODE) AS
(
Select 1, 2, 4567 From Dual Union All
Select 1, 2, 1234 From Dual Union All
Select 1, 2, 5890 From Dual
),
addition_supplier (FILE_ID,PROCESS_ID,SUPPLIER_CODE) AS
(
Select 1, 2, 7890 From Dual Union All
Select 1, 2, 1234 From Dual Union All
Select 1, 2, 5890 From Dual
)
SELECT ta.SUPPLIER_CODE
FROM main_supplier ta
WHERE ta.FILE_ID=1 and ta.PROCESS_ID = 2 and
Exists(Select 1
From addition_supplier sa
Where sa.FILE_ID = ta.FILE_ID And sa.PROCESS_ID = ta.PROCESS_ID And sa.SUPPLIER_CODE = ta.SUPPLIER_CODE)
SUPPLIER_CODE
-------------
1234
5890
獲得此結果的另一種方法是使用 INNER JOIN ...
SELECT ta.SUPPLIER_CODE
FROM main_supplier ta
INNER JOIN addition_supplier sa
ON( sa.FILE_ID = ta.FILE_ID And sa.PROCESS_ID = ta.PROCESS_ID And sa.SUPPLIER_CODE = ta.SUPPLIER_CODE)
WHERE ta.FILE_ID=1 and ta.PROCESS_ID = 2
SUPPLIER_CODE
-------------
1234
5890
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.