如何使用 NOT EXISTS 从数据 Link 表中插入记录
How to INSERT records from Data Link Tables using NOT EXISTS
我安装了 4 个远程位置和 oracle express 数据库。这些位置在那里创建了一些交易,我想每天 运行 一次 job/procedure 将新记录插入我们总部的中央 table。总公司table结构和远程table完全一样
我运行正在执行以下查询,但它没有插入任何记录。不想用物化视图,也不想天天把总公司table丢了再建
INSERT INTO CENTRAL_DATA
SELECT *
FROM (SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC1
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC2
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC3)
WHERE NOT EXISTS (SELECT * FROM CENTRAL_DATA)
我们将不胜感激任何帮助。
谢谢
当 CENTRAL_DATA table 中存在记录时,您的查询不会插入任何内容。您缺少选择标准。我不知道那个标准是什么。也许您想仅在特定位置没有记录时才插入?那么查询将是:
INSERT INTO CENTRAL_DATA
SELECT *
FROM (SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC1
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC2
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC3) I
WHERE NOT EXISTS (SELECT 1
FROM CENTRAL_DATA d
where d.location_id=i.location_id)
但是,请参阅有关为什么这并不总是一个好主意的评论:
Oracle: how to INSERT if a row doesn't exist
我安装了 4 个远程位置和 oracle express 数据库。这些位置在那里创建了一些交易,我想每天 运行 一次 job/procedure 将新记录插入我们总部的中央 table。总公司table结构和远程table完全一样
我运行正在执行以下查询,但它没有插入任何记录。不想用物化视图,也不想天天把总公司table丢了再建
INSERT INTO CENTRAL_DATA
SELECT *
FROM (SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC1
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC2
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC3)
WHERE NOT EXISTS (SELECT * FROM CENTRAL_DATA)
我们将不胜感激任何帮助。 谢谢
当 CENTRAL_DATA table 中存在记录时,您的查询不会插入任何内容。您缺少选择标准。我不知道那个标准是什么。也许您想仅在特定位置没有记录时才插入?那么查询将是:
INSERT INTO CENTRAL_DATA
SELECT *
FROM (SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC1
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC2
UNION ALL
SELECT LOCATION_ID,
INVOICE_ID,
INVOICE_DATE,
ANALYSIS_1,
ANALYSIS_2
FROM INVOICEDATA@LOC3) I
WHERE NOT EXISTS (SELECT 1
FROM CENTRAL_DATA d
where d.location_id=i.location_id)
但是,请参阅有关为什么这并不总是一个好主意的评论: Oracle: how to INSERT if a row doesn't exist