根据另一个表中的现有值在MySQL表中插入记录

时间:2009-04-06 13:27:14

标签: mysql insert concat

我正在使用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但没有结果。

任何线索??

7 个答案:

答案 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子句

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

答案 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
)