我是stackoverflow的新手,所以请保持柔和。我在使用SQL语法时遇到了严重麻烦。最重要的是,我想从一个表复制到另一个表而没有重复项。我打算比较两个字段,并且仅当destinationTB中的field1为NULL时才插入。
请知道我是SQL语句的新手,所以任何扩展的知识都将对您有所帮助……例如我可以使用变量。我从stackoverflow研究获得了最初的陈述,但是无法完成它。
这是我所拥有的,感谢您的帮助:
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,它具有多个字段,但是我仅需要其中一个即可获取信息。我的计划是将INSERT启动到destinationTB。由于第一个值不在其中,因此应将其报告为NULL。完成第一个插入操作之后,字符串仍在针对现在存在的相同值运行,它将不再报告NULL,并且继续进行直到找到不在destinationTB中的另一个值。
例如,让我们看电视。有多个不同的电视制造商。在此示例中,我们将说有一个SHARP-32in,一个SHARP-45in和一个SHARP-60in。我希望destinationTB仅具有一个SHARP实例(即使sourceTB中有三个实例。因此,我试图使用该JOIN语句将destinationTB.manufacturer与sourceTB.manufacturer进行比较。当我运行此查询时,我将在其后粘贴在本段中,它将返回所有三个实例,因此我在destinationTB中得到了三个SHARP值。
这是我根据您的建议尝试的最新作品:
INSERT INTO destnationTB (field1)
SELECT sourceTB.field1
FROM sourceTB
LEFT JOIN destinationTB ON sourceTB.field1 = destinationTB.field1
WHERE destinationTB.field1 IS NULL;
最佳答案
似乎您正在尝试插入两个field1列,而目标表只有一个。它应该是:
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 ;
完成查询后,临时表确实消失了。