oracle的子查询:错误没有得到解决

问题描述:

我有两个表:oracle的子查询:错误没有得到解决

一个是ATM等是HOST(结构是相同的) 有一个在ATM数据,其不存在于HOST。我想同步这些表格,也就是说,不管从HOST丢失并存在于ATM中的数据,都必须返回。

我的解决办法:

SELECT HOST.TRANS_ID WHERE NOT EXISTS 
    (SELECT * FROM ATM WHERE ATM.TRANS_ID = HOST.TRANS_ID) 

还是我得到一个错误!

+1

你得到了什么错误? – Ollie

首先,为了解决您遇到的错误,您的SQL无效。要执行你试图写你需要在你的外部查询FROM条款查询,应改为:

SELECT HOST.TRANS_ID 
    FROM host 
WHERE NOT EXISTS 
     (SELECT * 
     FROM ATM 
     WHERE ATM.TRANS_ID = HOST.TRANS_ID); 

但是,您的查询将不会返回你需要由您定义的数据(“数据从主机丢失“),如果数据不存在于HOST中,您如何选择它?

我会倾向于使用下面的查询来解决您的问题:

SELECT trans_id 
    FROM atm 
    LEFT OUTER JOIN host 
USING trans_id 
    WHERE host.rowid IS NULL; 

在此查询中,我们执行外连接从ATM返回所有行(因为它持有HOST不存在行)。 HOST中不存在的行将返回NULL rowid,因此通过选择所有TRANS_ID值,其中HOST rowid为空将显示ATM值,该值没有对应的HOST值,我相信这正是您想要的值。

HTH