SQL—将列数据从一个表添加到另一个表中,同时保留原始数据
我需要将一个表table1中的数据添加到另一个表table2中,其中fullname列中的数据与两个表中的数据匹配。下面的代码几乎满足了我的要求,只是它删除了table1标题列中的所有其他数据SQL—将列数据从一个表添加到另一个表中,同时保留原始数据,sql,database,oracle,Sql,Database,Oracle,我需要将一个表table1中的数据添加到另一个表table2中,其中fullname列中的数据与两个表中的数据匹配。下面的代码几乎满足了我的要求,只是它删除了table1标题列中的所有其他数据 UPDATE table1 SET title = (SELECT title FROM table2 WHERE table2.fullname = table1.fullname) 我的目标是在运行SQL查询之前,更新table1的标题列,使其
UPDATE table1
SET title = (SELECT title
FROM table2
WHERE table2.fullname = table1.fullname)
我的目标是在运行SQL查询之前,更新table1的标题列,使其既有最初拥有的数据,又有table2标题列中的数据,而不删除table1标题列中的数据。我假设您正在使用Oracle,因为您已经给出了语法。问题是,当使用这种形式的UPDATE语句时,还需要WHERE EXISTS子句或类似的内容:
UPDATE table1
SET title = ( SELECT title
FROM table2
WHERE table2.fullname = table1.fullname )
WHERE EXISTS ( SELECT 1 FROM table2
WHERE table2.fullname = table1.fullname )
否则,不匹配的标题将被取消!原因是,当表2中不存在fullname时,子查询的结果将为NULL
如果以上@PM 77-1注释中的连接是您需要的,那么您需要执行以下操作:
UPDATE table1
SET title = title || ',' || ( SELECT title
FROM table2
WHERE table2.fullname = table1.fullname )
WHERE EXISTS ( SELECT 1 FROM table2
WHERE table2.fullname = table1.fullname )
希望这能有所帮助。我假设您正在使用Oracle,因为您已经给出了语法。问题是,当使用这种形式的UPDATE语句时,还需要WHERE EXISTS子句或类似的内容:
UPDATE table1
SET title = ( SELECT title
FROM table2
WHERE table2.fullname = table1.fullname )
WHERE EXISTS ( SELECT 1 FROM table2
WHERE table2.fullname = table1.fullname )
否则,不匹配的标题将被取消!原因是,当表2中不存在fullname时,子查询的结果将为NULL
如果以上@PM 77-1注释中的连接是您需要的,那么您需要执行以下操作:
UPDATE table1
SET title = title || ',' || ( SELECT title
FROM table2
WHERE table2.fullname = table1.fullname )
WHERE EXISTS ( SELECT 1 FROM table2
WHERE table2.fullname = table1.fullname )
希望这有帮助。在Oracle中,您可以使用合并:
MERGE INTO table1 t1
USING (SELECT fullname, title
FROM table2) t2
ON t1.fullname = t2.fullname
WHEN MATCHED THEN
UPDATE SET t1.title = t2.title;
这只会更新与全名匹配的行。在Oracle中,您可以使用合并:
MERGE INTO table1 t1
USING (SELECT fullname, title
FROM table2) t2
ON t1.fullname = t2.fullname
WHEN MATCHED THEN
UPDATE SET t1.title = t2.title;
这将只更新找到全名匹配项的行。如果表2中有两个或多个记录具有相同的全名,该怎么办?您标记了所有dbms,使用的是哪个dbms、oracle或sql Server?您的意思是要连接这两个字段吗?google update join用于您的dbms@ekad,这是一个好问题。它确实使事情复杂化。有很多方法可以解决这个问题,最简单的方法是在子查询中使用一个聚合函数,如MAX。如果表2中有两个或多个记录具有相同的全名,该怎么办?您标记了所有的dbms,您使用的是哪一个dbms,oracle还是sql Server?您的意思是要连接这两个字段吗?google update join用于您的dbms@ekad,这是一个好问题。它确实使事情复杂化。有很多方法可以解决这个问题,最简单的方法就是在子查询中使用聚合函数,比如MAX。谢谢。你的第一个建议正是我所需要的。谢谢。你的第一个建议正是我所需要的。