【发布时间】:2014-07-10 20:26:59
【问题描述】:
我试图在 fabcon 表中设置一列,仅当原始列为空时。
这是我已经尝试过的代码。
UPDATE dbo.fabcon
SET ext = COALESCE(ext, ( SELECT CASE WHEN [<3] IS NOT NULL THEN '3' END AS extent
FROM dbo.spreadsheetData ))
这是我得到的错误:
子查询返回超过 1 个值。当子查询跟在=, !=, <, <= , >, >= 之后或当子查询用作表达式时,这是不允许的。
谁能看出我哪里出错了?
谢谢。 :)
编辑:fabcon 和电子表格数据这两个表由名为 main1 的列链接
EDIT2:我已将查询更新为:
UPDATE dbo.fabcon
SET ext = (SELECT CASE WHEN [<3] IS NOT NULL THEN '3' END
FROM dbo.spreadsheetData ssd
WHERE ssd.id = fabcon.id
)
WHERE ext IS NULL;
但是,它仍然失败并出现同样的错误。
【问题讨论】:
-
你的两张表有什么关系?
-
原始列表示两个表之间存在链接,您可以使用该链接。链接是什么?
-
请使用示例数据和所需结果编辑您的问题。错误信息非常明显。您的子查询返回不止一行。它甚至没有
where子句,所以这并不奇怪。 -
我已经更新了原始问题。感谢您的反馈。
-
所以表 spreadsheetData 和 fabcon 是 1:1 相关的并且具有相同的 id?这是一个可能的模型,但你不会得到错误。所以很明显这些表不是 1:1 相关的,它们没有相同的 id,语句可能应该是这样的:
WHERE ssd.id = fabcon.id_ssd。
标签: sql sql-server