Mysql SQL语法——左连接
我是新来的,所以请温柔一点。我的SQL语法有严重问题。底线是我想从一个表复制到另一个表,没有重复项。我将比较两个字段,并且仅在destinationTB中的字段1为空时插入 请知道我是SQL语句的新手,所以任何扩展的知识都会有帮助。。。比如我可以使用变量。我从stackoverflow research获得了最初的声明,但无法完成 这是我所拥有的,谢谢你的帮助: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
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;