Sql oracle子查询:无法解决错误
我有两张桌子: 一个是ATM,另一个是主机(结构相同) ATM中存在主机中不存在的数据。我想同步这些表,也就是说,必须返回主机丢失的和ATM中存在的任何数据 我的解决方案:Sql oracle子查询:无法解决错误,sql,oracle,oracle11g,subquery,Sql,Oracle,Oracle11g,Subquery,我有两张桌子: 一个是ATM,另一个是主机(结构相同) ATM中存在主机中不存在的数据。我想同步这些表,也就是说,必须返回主机丢失的和ATM中存在的任何数据 我的解决方案: SELECT HOST.TRANS_ID WHERE NOT EXISTS (SELECT * FROM ATM WHERE ATM.TRANS_ID = HOST.TRANS_ID) 但我还是犯了一个错误 首先,为了解决您遇到的错误,您的SQL无效。要执行您试图编写的查询,您需要在外部查询中使用FROM子句,该子
SELECT HOST.TRANS_ID WHERE NOT EXISTS
(SELECT * FROM ATM WHERE ATM.TRANS_ID = HOST.TRANS_ID)
但我还是犯了一个错误 首先,为了解决您遇到的错误,您的SQL无效。要执行您试图编写的查询,您需要在外部查询中使用
FROM
子句,该子句应为:
SELECT HOST.TRANS_ID
FROM host
WHERE NOT EXISTS
(SELECT *
FROM ATM
WHERE ATM.TRANS_ID = HOST.TRANS_ID);
但是,根据您的定义,您的查询将不会返回所需的数据(“主机缺少数据”),如果数据不存在于主机中,您如何选择它
我倾向于使用以下查询来解决您的问题:
SELECT trans_id
FROM atm
LEFT OUTER JOIN host
USING trans_id
WHERE host.rowid IS NULL;
在这个查询中,我们执行一个外部连接,返回来自ATM
的所有行(因为它包含主机中不存在的行)。主机中不存在的行将返回空的rowid,因此通过选择所有TRANS\u ID
值(其中HOST
rowid为空),将向您显示没有相应HOST
值的ATM
值,我相信这是您想要的
HTH您遇到了什么错误?