我有一个IDNumber,Birthdate,Option和ID列的成员表。该ID是一个GUID,是PK。如何使用具有不同ID值的同一表中的记录更新SQL-Server 2008表
现在,一些议员在方案1和都充满了数据(IDNumber中,生日)列。 部分会员在其他选项中。 在此示例中,选项3上有成员与选项1上的成员具有相同的ID号(实际上它们是相同成员,具有多个选项)。 但是,这些成员的Birthdate列是空的。 我想更新我的表,以匹配选项1来自会员的生日值,以反映期权3.
从本质上说,
Option |IDNumber |Birthdate
-----------------------------------
1 |123 |19900101
1 |234 |19800101
3 |123 |
3 |234 |
我怎么会去更新,以反映失踪的生日选项3? 我至今尝试:
DECLARE @temp TABLE (
--birthdate int,
idnumber VARCHAR(13)
)
INSERT INTO @temp (idnumber)
SELECT IDNumber
FROM Member
WHERE
OPTION = 1
AND IDNumber IN (SELECT IDNumber FROM Member WHERE OPTION = 3)
UPDATE Member
SET BirthDate = m2.BirthDate
FROM Member m2
INNER JOIN @temp m ON m.idnumber = m2.IDNumber
WHERE
OPTION = 3
它说这影响了记录,但不属于期权成员3
我也试图做的事:
update member set BirthDate = (select BirthDate from Member where
Option=1 and IDNumber in(select IDNumber from Member
where Option=3))
where Option=3
它返回错
子查询返回多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。
请你能在指出我在那里出了错帮助?
似乎是错误的方法。不要多次存储生日。你需要一个单独的桌子! – jarlh
@Nicholas,所以你需要Id'123'作为'Option3'必须具有生日到'19900101'。类似的,Id' 234'和'Option3'的出生日期应该设置为'19800101'? – Kane
成员只应在您的会员表中出现一次,并且您应该有一个相关的选项表,它链接在会员ID上。您的设计不正确,这是您遇到此问题的原因。 – Tanner