Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据另一个表中的现有值在MySQL表中插入记录_Mysql_Insert_Concat - Fatal编程技术网

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

根据另一个表中的现有值在MySQL表中插入记录,mysql,insert,concat,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,但没有结果 有什么线索吗???您可以查看MySql的ON DUPLICATE子句

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

有什么线索吗???

您可以查看MySql的ON DUPLICATE子句

您可以查看MySql的ON DUPLICATE子句


你不能说姓名和身份证不在。。。你需要为每一个单独的条款。但是您是否将id作为表T_sales中的主键?如果是这样,那么这就是您需要检查的全部内容,例如:

INSERT INTO sales (name, id) 
(SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales));
编辑


嗯,从其他人的回答来看,最好不要理我,因为他们似乎知道得更多:-

你不能说姓名和身份证不在哪里。。。你需要为每一个单独的条款。但是您是否将id作为表T_sales中的主键?如果是这样,那么这就是您需要检查的全部内容,例如:

INSERT INTO sales (name, id) 
(SELECT name, id FROM sales_h WHERE id NOT IN (SELECT id FROM T_sales));
INSERT
INTO    sales (name, id)
SELECT  name, id
FROM    sales_h
WHERE  (name, id) NOT IN
       (
       SELECT name, id
       FROM t_sales
       )
编辑


嗯,从其他人的回答来看,最好不要理我,因为他们似乎知道得更多:-

问题在于你在哪里

INSERT
INTO    sales (name, id)
SELECT  name, id
FROM    sales_h
WHERE  (name, id) NOT IN
       (
       SELECT name, id
       FROM t_sales
       )
它不像你那样读书。您将其读取为其中name和id不在…,而它读取为其中name不为null,id不在。。。。。。如果你明白我的意思


更改为:ROWname,id不在SELECT name中,id来自T_sales

问题在于你的位置

它不像你那样读书。您将其读取为其中name和id不在…,而它读取为其中name不为null,id不在。。。。。。如果你明白我的意思

更改为:ROWname,id不在SELECT name中,id来自T_sales

你试过这个方法吗

你试过这个方法吗


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);
就我个人而言,我不喜欢这样做有两个原因:tuple as variable在其他RDBMS上不起作用或工作方式不同,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);

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);
就我个人而言,我不喜欢这样做有两个原因:tuple as variable在其他RDBMS上不起作用或工作方式不同,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);