案例sql不工作时的更新
我试图从一个表中更新两个字段:FirstName和LastName,从同一个表中获取数据,但是从包含first和LastName的Name字段中获取数据 我试过:案例sql不工作时的更新,sql,Sql,我试图从一个表中更新两个字段:FirstName和LastName,从同一个表中获取数据,但是从包含first和LastName的Name字段中获取数据 我试过: UPDATE Table SET FirstName = (SELECT CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1) ELSE name END
UPDATE Table SET FirstName = (SELECT CASE
WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1)
ELSE name
END
from Table),
LastName = (select CASE
WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
END from Table)
我收到以下错误消息:子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。您不需要子查询,只需要逻辑:
UPDATE Table
SET FirstName = (CASE WHEN name LIKE '% %' THEN LEFT(name, Charindex(' ', name) - 1)
ELSE name
END),
LastName = (CASE WHEN name LIKE '% %' THEN RIGHT(name, Charindex(' ', Reverse(name)) - 1)
END
);
或者,添加一个where
语句并执行两个更新:
UPDATE Table
SET FirstName = LEFT(name, Charindex(' ', name) - 1),
LastName = RIGHT(name, Charindex(' ', Reverse(name)) - 1)
WHERE name LIKE '% %';
UPDATE TABLE
SET LastName = NULL
WHERE name not like '% %';
如果字段已为
NULL
请检查子查询,则可能不需要第二个字段。错误本身就说明了这一点。它不能允许超过1个值。它必须只返回一个值。你用的是两张不同的桌子吗?只能将表视为tablename。答案将取决于后端,尽管消息听起来确实像SQL Server,但您可能需要重新编写它,以便不存在子查询。在我看来,您不应该需要这些子查询。案例陈述是的,子查询不是。你说得对,杰里米·库克!:)