INSERT INTO `tableA`
SELECT `Col1`,
`Col2`,
NOW()
FROM `tableB`
WHERE tableA.Col1 is not already in tableB.Col1
我无法正确获取WHERE子句以确保从tableA复制的记录只出现在表B中一次......
答案 0 :(得分:5)
应为:
其中tableA.col1不在(从表B中选择col1)
答案 1 :(得分:3)
您真的需要SQL-2003 MERGE语句。我在下面的标准(怪诞,但这是你的SQL标准)中包含了BNF的MERGE语句(第14.9节,第883页)。翻译时,可能会转换为:
MERGE INTO TableA
USING TableB ON TableA.Col1 = TableB.Col1
WHEN NOT MATCHED INSERT (Col1, Col2, Col3)
VALUES(TableB.Col1, TableB.Col2, NOW());
我还没有运行那个知道MERGE语句的SQL DBMS - 这意味着它可能存在错误。注意,有一个WHEN MATCHED子句可以在标准中采用UPDATE; IBM DB2还支持DELETE子句,该子句不符合2003标准(不确定2008标准)。
<merge statement>
(p837)有条件地更新表的行,或将新行插入表中,或两者兼而有之。
<merge statement> ::=
MERGE INTO <target table> [ [ AS ] <merge correlation name> ]
USING <table reference> ON <search condition>
<merge operation specification>
<merge correlation name> ::=
<correlation name>
<merge operation specification> ::=
<merge when clause> ...
<merge when clause> ::=
<merge when matched clause> |
<merge when not matched clause>
<merge when matched clause> ::=
WHEN MATCHED THEN <merge update specification>
<merge when not matched clause> ::=
WHEN NOT MATCHED THEN <merge insert specification>
<merge update specification> ::= UPDATE SET <set clause list>
<merge insert specification> ::=
INSERT [ <left paren> <insert column list> <right paren> ]
[ <override clause> ] VALUES <merge insert value list>
<merge insert value list> ::=
<left paren> <merge insert value element>
[ { <comma> <merge insert value element> }... ] <right paren>
<merge insert value element> ::=
<value expression> |
<contextually typed value specification>
答案 2 :(得分:1)