我有 2 个表:CUST_DETAILS
with columnCUST_REF_ID
和
CUST_MERGE
with columns NEW_CUST_REF_ID
and OLD_CUST_REF_ID
,下面的脚本将检查两个列是否CUST_MERGE
具有相同的国家/地区 id 与相应的列CUST_DETAILS
,并返回 Y,否则返回 N
SELECT
NVL
((SELECT 'Y' FROM DUAL WHERE EXISITS
(
SELECT CTRY_ID FROM CUST_DETAILS cust_dtl
INNER JOIN CUST_MERGE cust_merge
ON cust_dtl.CUST_REF_ID=cust_merge.NEW_CUST_REF_ID
AND cust_dtl.CUST_REF_ID=cust_merge.OLD_CUST_REF_ID
GROUP BY CTRY_ID
HAVING COUNT(CTRY_ID)>1
)),'N') AS SAME_CTRY_ID
FROM DUAL;
两个表中的数据都具有相同的 country_id,这意味着预期结果是“Y”。但是现在返回“N”,除非我将条件从 更改为 ,否则AND
它OR
会按预期工作,即使子查询也返回正确的国家/地区 ID
样本数据
表 CUST_MERGE
NEW_CUST_REF_ID OLD_CUST_REF_ID
B5000 B6000
B5000 A6000
表 CUST_DETAILS
CUST_REF_ID CTRY_ID
B5000 US
B6000 US
A6000 JP
执行第一行CUST_MERGE
,B5000和B6000,返回Y,因为ctry_id相同(美国) 执行第二行CUST_MERGE
,B5000和A6000,返回N,因为ctry_id不同(美国,日本)