我们通过批处理从第三方数据提供商处获取数据。对于它们提供的模式,它们会发出分隔文本文件,指示要删除的记录,然后是要添加的记录的不同文本文件。
我删除记录的计划是将记录加载到临时表中,然后通过内部联接删除记录。例如:
-- main table
CREATE TABLE main_table (
city VARCHAR(40) NOT NULL,
state CHAR(2) NOT NULL,
PRIMARY KEY (city, state));
-- removing records
CREATE TEMPORARY TABLE delete_table (
city VARCHAR(40) NOT NULL,
state CHAR(2) NOT NULL,
PRIMARY KEY (city, state));
INSERT INTO main_table (city, state) VALUES
('Chicago', 'IL'),
('Seattle', 'WA'),
('New York', 'NY'),
('Springfield', 'IL'),
('Springfield', 'MA');
INSERT INTO delete_table (city, state) VALUES
('Chicago', 'IL'),
('New York', 'NY'),
('Springfield', 'MA');
-- Delete statement
DELETE FROM main_table t
USING delete_table d
WHERE t.city=d.city AND t.state=d.state;
这是在这种情况下通常删除记录的最佳方法吗?记录删除的范围可以从几行到一百万,具体取决于表和日以及一百个表。此外,任何具有复合主键的表都需要自定义的where子句。有没有办法使用自然连接或USING(列列表)谓词?