我正在使用MySQL。我想在表中插入一些记录,前提是它们没有 存在于另一个表中。所以我想做这样的事情:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);
问题是MySQL不允许这种语法(与where子句有关...)我尝试使用CONCAT但没有结果。
任何线索??
答案 0 :(得分:1)
INSERT
INTO sales (name, id)
SELECT name, id
FROM sales_h
WHERE (name, id) NOT IN
(
SELECT name, id
FROM t_sales
)
答案 1 :(得分:1)
您是否尝试过 EXISTS syntax?
INSERT INTO sales (name, id)
SELECT name, id
FROM sales_h
WHERE NOT EXISTS (SELECT * FROM T_sales WHERE T_sales.name = sales_h.name AND T_sales.id = sales_h.id);
答案 2 :(得分:1)
MySQL允许您使用类似变量的元组:
这是你的陈述:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE name AND id NOT IN (SELECT name, id FROM T_sales);
问题是“名称和ID”。把它变成一个元组:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h
WHERE (name, id) NOT IN (SELECT name, id FROM T_sales);
就个人而言,我不喜欢这么多,原因有二:作为变量的元组在其他RDBMS上不起作用(或工作方式不同),IN在许多情况下往往表现不佳,所以我喜欢把它变成一个习惯不使用IN。
正如jhonny-d-cano-leftware所述(我已经修改过他),我会使用一个不存在的地方:
INSERT INTO sales (name, id)
SELECT name, id FROM sales_h a
WHERE not exists (
SELECT *
FROM T_sales b
where b.id = a.id and b.name = a.name);
答案 3 :(得分:0)
您可以查看MySql的ON DUPLICATE
子句
答案 4 :(得分:0)
你不能说WHERE name AND id NOT IN ...你需要一个单独的条款。但是你有id作为表T_sales中的主键吗?如果是这样,那就是你需要检查的东西,如:
INSERT INTO sales (name, id)
(SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales));
修改
嗯,从别人的答案来看,最好不要理睬我,因为他们似乎知道更多: - )
答案 5 :(得分:0)
问题出在你的身上。
它不像你一样阅读。你把它读作“WHERE(名称和id)NOT IN(...)”,而它将它读作“WHERE name(不是null)AND(id NOT IN(...))”..如果你理解我的意思。
更改为:ROW(name, id) NOT IN (SELECT name, id FROM T_sales);
答案 6 :(得分:0)
INSERT INTO table_name(column1, column2) SELECT "value one", "value two" FROM DUAL
WHERE NOT EXISTS(
SELECT column1 FROM table_name
WHERE column1 = "value one"
AND column2 = "value two" LIMIT 1
)