我是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;
答案 0 :(得分:0)
您似乎尝试插入两个 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 ;
完成查询后,临时表会消失。
答案 1 :(得分:0)
我将对这个问题进行一些全面的概括。我假设field1是sourceTB和destinationTB上的PK并且是唯一的字段。如果最终目标只是合并两个表,那么这应该只有零影响,因为如果destinationTB.field1 IS NULL
那么destinationTB.field1
NEVER 将等于任何东西,包括另一个NULL。你正在寻找一个外部联盟。
INSERT INTO destinationTB
SELECT sourceTB.id
FROM sourceTB
LEFT OUTER JOIN destinationTB
ON sourceTB.id = destinationTB.id
WHERE destinationTB.id IS NULL
答案 2 :(得分:0)
好吧,我想出了上面修改过的问题的解决方案。此语句将仅返回sourceTB中多次出现的值的单个实例。
INSERT INTO destinationTB (field1)
SELECT DISTINCT field2 FROM sourceTB
WHERE EXISTS (SELECT field1 FROM destinationTB)
感谢您的帮助,以及在此处撰写问题时的提示。
以下是我对答案的参考:http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html