oracle子查询:错误未得到解决

时间:2014-01-05 09:32:02

标签: sql oracle oracle11g subquery

我有两张桌子:

一个是ATM而另一个是HOST(结构相同) ATM中的数据在HOST中不存在。

我希望同步这些表,即从主机中丢失并存在于ATM中的任何数据。

我的解决方案:

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

我仍然收到错误!

1 个答案:

答案 0 :(得分:1)

首先,为了解决您遇到的错误,您的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 rowid为null的所有HOST值将显示没有对应{{1}的ATM值我相信你想要的价值。

HTH