首先,我对SQL很陌生,所以即使我相信在这个帖子中提出了类似的问题(SQL Query - Copy Values in Same Table),我也完全不能理解它来利用这些信息。为此,我道歉。
现在,我有一个看起来像这样的表:
company id | parameter name | parameter title
P | Parameter One | First Parameter
P | Parameter Two | Second Parameter
P | Parameter Three| Third Parameter
W | Parameter One | NULL
W | Parameter Two | NULL
除了我的桌子显然有很多行。我已经完成了公司ID为“P”的所有参数标题的填写,并且希望避免为公司ID为“W”的人手动执行相同的操作。我的问题是我可以使用什么SQL语句(这是在Microsoft SQL Server 2008中)将公司ID为“P”的列“参数标题”中的值复制到公司ID为'的同一列中的值W'和两个参数名称都匹配(W的参数少于P)?
使用以前链接的线程,我能够提出以下内容,但它会发出错误,我知道它没有正确完成:
UPDATE COMP_PARAMETER_COPY
SET PARAM_TITLE=(SELECT PARAM_TITLE FROM COMP_PARAMETER_COPY P
WHERE P.COMP_ID = 'P' AND P.PARAM_TITLE=PARAM_TITLE)
WHERE COMP_ID='W'
(我正在玩桌子的副本而不是实际的桌子)
我得到的错误是“Msg 512,Level 16,State 1,Line 1 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 声明已经终止。“
感谢您的帮助和建议, -Asaf
答案 0 :(得分:1)
您需要确保子查询仅返回一个结果。现在,错误消息告诉您正在返回多条记录。
UPDATE W
SET PARAM_TITLE = (
SELECT PARAM_TITLE FROM COMP_PARAMETER_COPY P
WHERE P.COMP_ID = 'P' AND P.PARAM_NAME = W.PARAM_NAME
)
FROM COMP_PARAMETER_COPY W
WHERE W.COMP_ID = 'W'
尝试给上面的SQL一个旋转。这仍然可以给你不止一个结果,但不知道你的表是什么样的,以及数据限制是什么,很难给你保证工作。
答案 1 :(得分:0)
尝试在查询中添加DISTINCT
关键字:
UPDATE COMP_PARAMETER_COPY
SET PARAM_TITLE=(SELECT DISTINCT PARAM_TITLE FROM COMP_PARAMETER_COPY P
WHERE P.COMP_ID = 'P' AND P.PARAM_TITLE=PARAM_TITLE)
WHERE COMP_ID='W'