Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL—将列数据从一个表添加到另一个表中,同时保留原始数据_Sql_Database_Oracle - Fatal编程技术网

SQL—将列数据从一个表添加到另一个表中,同时保留原始数据

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的标题列,使其

我需要将一个表table1中的数据添加到另一个表table2中,其中fullname列中的数据与两个表中的数据匹配。下面的代码几乎满足了我的要求,只是它删除了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。谢谢。你的第一个建议正是我所需要的。谢谢。你的第一个建议正是我所需要的。