2016-08-11 65 views
1

我有2个表:MySQL的插入列数据从另一个表

original {ID, FirstName, LastName} 
    and 
    dummy {ID(NULL), FirstName, LastName} 

我必须插入t2.ID的original.ID但只有两个表中的名字和姓氏都一样。现在,我已经试过:

。错误代码:1054未知列 't2.FirstName' 在 'where子句'

INSERT INTO dummy (ID) 
SELECT ID 
FROM original 
WHERE dummy.FirstName = original.FirstName 
    AND dummy.LastName = original.LastName; 

2.Error代码:1054未知列“original.FirstName “在‘​​where子句’

UPDATE dummy 
SET ID = original.ID 
WHERE dummy.FirstName=original.FirstName 
    AND dummy.LastName= original.LastName; 

3.Error代码:1175您正在使用安全更新模式,你试过没有一个WHERE使用一个键列禁用安全模式来更新表,切换的选项首选项 - > SQL编辑器并重新连接。

注意:我必须找到一种方法,而不禁用安全模式。

UPDATE dummy 
    JOIN original 
    ON original.FirstName = dummy.FirstName 
     AND original.LastName = dummy.LastName 
SET dummy.IDPacient = original.ID 
WHERE original.ID <> 0; 

现在,如果有人可以帮助我明白我在每个3个案例做错了和/或给我一个更好的解决方案,我将非常感激帮助。

回答

2

版本1显然是错误的 - 您将插入一个新行,而不是更新现有行。

第2版是接近的,你只需要一个连接到“原始”:

UPDATE dummy 
SET ID = original.ID 
FROM dummy 
INNER JOIN original 
    ON dummy.FirstName =original.FirstName 
    AND dummy.LastName = original.LastName; 
+0

感谢您的帮助。但是这里有一些东西,我在'FROM'处得到一个语法错误,告诉我''在这个位置不是一个有效的输入' – MRM

+0

我已经通过从QUERY FROM'移除错误并在末尾移动'set' 。 – MRM

1

您需要执行的“原始”和“虚拟”表之间的第一个和最后一个名字一个连接,然后更新该ID

试试这个..

Update a 
Set a.ID = b.ID 
From dummy a 
Join original b 
On a.firstname = b.firstname 
And b.lastname = b.firstname 

在查询你试图基于“原始”表列过滤,但它不包括在FROM子句。

如果您需要,此链接可能还会提供一些更有用的信息。 SQL update query using joins

相关问题