我有两张桌子:
一个是ATM而另一个是HOST(结构相同) ATM中的数据在HOST中不存在。 我希望同步这些表,即从主机中丢失并存在于ATM中的任何数据。我的解决方案:
SELECT HOST.TRANS_ID WHERE NOT EXISTS
(SELECT * FROM ATM WHERE ATM.TRANS_ID = HOST.TRANS_ID)
我仍然收到错误!
答案 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