Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 SQL语法——左连接_Mysql_Sql_Variables_Left Join - Fatal编程技术网

Mysql SQL语法——左连接

Mysql SQL语法——左连接,mysql,sql,variables,left-join,Mysql,Sql,Variables,Left Join,我是新来的,所以请温柔一点。我的SQL语法有严重问题。底线是我想从一个表复制到另一个表,没有重复项。我将比较两个字段,并且仅在destinationTB中的字段1为空时插入 请知道我是SQL语句的新手,所以任何扩展的知识都会有帮助。。。比如我可以使用变量。我从stackoverflow research获得了最初的声明,但无法完成 这是我所拥有的,谢谢你的帮助: INSERT INTO destinationTB SELECT sourceTB.field1, destinationTB.f

我是新来的,所以请温柔一点。我的SQL语法有严重问题。底线是我想从一个表复制到另一个表,没有重复项。我将比较两个字段,并且仅在destinationTB中的字段1为空时插入

请知道我是SQL语句的新手,所以任何扩展的知识都会有帮助。。。比如我可以使用变量。我从stackoverflow research获得了最初的声明,但无法完成

这是我所拥有的,谢谢你的帮助:

 INSERT INTO destinationTB
 SELECT sourceTB.field1, destinationTB.field1
 FROM sourceTB
 LEFT JOIN destinationTB
 ON sourceTB.field1 = destinationTB.field1
 WHERE destinationTB.field1 IS NULL;
-----修订问题-----

谢谢你的提示!我会尽量修改这个问题(以及以后的问题),使之更容易理解,并为我最后一个问题中难闻的“新来的孩子”的味道道歉

我要寻找的最终结果是从一个表复制到另一个表,而不需要重复。我正在处理两张桌子。第一个是destinationTB,它有四个字段,我只想填充其中一个字段。第二个表是sourceTB,它有多个字段,但我只需要从其中一个字段获取信息。我的计划是开始插入目标B。因为第一个值不在其中,所以它应该报告为NULL。在第一次插入完成后,字符串仍然针对现在存在的相同值运行,它将不再报告NULL,并继续运行,直到找到destinationTB中不存在的另一个值

作为一个例子,我们一起去看电视吧。有多家不同的电视制造商。在这个例子中,我们会说,我们有一个夏普-32英寸,一个夏普-45英寸,和一个夏普-60英寸。我希望DestinationB只有一个SHARP实例(尽管sourceTB.So中有三个实例,但我尝试使用该JOIN语句将destinationTB.manufacturer与sourceTB.manufacturer进行比较。当我运行此查询时,我将在本段后面粘贴它,它将返回所有三个实例,因此我的destinationTB中有三个尖锐的值

以下是我根据您的建议尝试的最新版本:

INSERT INTO destnationTB (field1)
SELECT sourceTB.field1
FROM sourceTB
LEFT JOIN destinationTB ON sourceTB.field1 = destinationTB.field1
WHERE destinationTB.field1 IS NULL;

您似乎试图插入两个字段1列,而目标表只有一列。它应该是:

INSERT into destinationTB 
    SELECT sourceTB.field1 
    FROM sourceTB 
    LEFT JOIN destinationTB ON sourceTB.field1 = destinationTB.field1 
    WHERE destinationTB.field1 IS NULL;
相应地展开每个应插入的字段。如果语法过于复杂,也可以使用临时表:

    CREATE TEMPORARY TABLE tempTB as 
    SELECT sourceTB.field1 
    FROM sourceTB 
    LEFT JOIN destinationTB ON sourceTB.field1 = destinationTB.field1 
    WHERE destinationTB.field1 IS NULL;

    INSERT into destinationTB 
    SELECT tempTB.field1 
    FROM tempTB ;

完成查询后,临时表确实会消失。

我将对这个问题做一些全面的概括。我假设field1是sourceTB和destinationTB上的PK,并且是唯一的字段。如果最终目标是合并这两个表,那么这应该不会产生任何影响,因为If
destinationTB.field1是NULL
然后
destinationTB.field1
将永远不会等于任何值,包括另一个NULL。您正在寻找外部联接

INSERT INTO destinationTB
  SELECT sourceTB.id 
  FROM sourceTB 
    LEFT OUTER JOIN destinationTB 
      ON sourceTB.id = destinationTB.id
  WHERE destinationTB.id IS NULL

好的,我对上面修改过的问题提出了一个解决方案。这个语句将只返回一个值在sourceTB中多次出现的实例

INSERT INTO destinationTB (field1)
SELECT DISTINCT field2 FROM sourceTB
WHERE EXISTS (SELECT field1 FROM destinationTB)
感谢您的帮助,以及在这里写问题时的提示


以下是我的答案参考资料:

我刚才回答了一个类似的问题,请阅读此答案,如果您还有更多问题,请发布更新。请参阅此链接哦,是的,欢迎访问,所以在第一个问题上尝试得不错,但请提供更多有关您面临挑战的细节。您使用的是MySQL还是SQL Server?问题是tagg两个都是。@RobertFizpatrick…你真的必须更好地解释你需要什么。这两个表中的列是什么?为什么你要加入插入表中的同一列?为什么它是同一个字段被测试为
NULL
?你的第一个解释帮助我更好地理解了它在语句中,我最初得到一个错误:“列计数与第1行的值计数不匹配”,因此我在要插入的字段中添加了。插入destnationTB(字段1)从sourceTB LEFT JOIN destinationTB中选择sourceTB.field1,destinationTB.field1=destinationTB.field1,其中destinationTB.field1为NULL;