Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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:如何在update语句中自引用列?_Sql_Sybase - Fatal编程技术网

SQL:如何在update语句中自引用列?

SQL:如何在update语句中自引用列?,sql,sybase,Sql,Sybase,我有两个包含以下列的表: 用户: 用户、班级、年级、位置 课程: 类别、位置 Users表的class列引用Classes表中的同一列 我想更新Users表中的所有行,以便Users表的“location”列的每一行都等于类的位置 所以我有一行值: 迈克,数学,A+,纽约 数学类表格中对应的行是: 数学,芝加哥 我希望用户表的行变为 迈克,数学,A+,芝加哥 谢谢这个怎么样: UPDATE U SET U.Location = C.Location FROM Users AS U INNER

我有两个包含以下列的表:

用户: 用户、班级、年级、位置

课程: 类别、位置

Users表的class列引用Classes表中的同一列

我想更新Users表中的所有行,以便Users表的“location”列的每一行都等于类的位置

所以我有一行值: 迈克,数学,A+,纽约

数学类表格中对应的行是: 数学,芝加哥

我希望用户表的行变为 迈克,数学,A+,芝加哥

谢谢

这个怎么样:

UPDATE U 
SET U.Location = C.Location
FROM Users AS U
INNER JOIN Classes AS C ON C.Class = U.Class
                AND C.Location != U.Location
 ;

您可能需要考虑规范化您的数据。如果位置仅依赖于类,为什么还要将其存储在用户表中?我不认为这是有效的语法是的,它是有效的语法,至少在MS SQL Server中是这样,我非常确定它与Sybase非常相似,可以在这里应用。好的,不是downvote顺便说一句,downvoter是否可以提供指向指定错误的文档的链接?同时+1用于补偿使用联接的+1。为什么我总是看到SQL问题的答案,其中忽略了连接而选择了子选择?我看不出有什么必要。错误处理也不是必需的,但这是一种很好的做法。@Maess,如果你说明了为什么连接会更好,你可能会对你的事业有所帮助。
UPDATE U 
SET U.Location = C.Location
FROM Users AS U
INNER JOIN Classes AS C ON C.Class = U.Class
                AND C.Location != U.Location
 ;
update users a
    set a.location =
     (select b.location 
      from classes b
      where b.class = a.class)