如何更新表我需要从多个子查询中获取数据

时间:2015-10-13 20:04:15

标签: sql sql-server

我有一个包含4列的表,当前为NULL,表格如下:

Users
- userId
- wantsMail   YES or NO

对于这4列中的每一列,我需要根据另一个表中的行(UserChoices)执行查询,如下所示:

userId  questionId answer (BIT)
123     3929       1

注意:答案是BIT,因此1必须翻译为'YES',0翻译为'NO'

所以我必须遍历User表中的所有行,然后使用'UsersChoices'表更新列。对于每一列,我都有我需要查询的问题。

因此,对于'wantMail',问题Id将是例如1039

这样的查询的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我相信这就是你想要的 - 它会将来自UserChoices的所有行插入questionId = 3929,同时将answer转换为wantMail:

INSERT INTO Users (userId, wantsMail)
SELECT
    UserId
    , CASE answer
        WHEN 1 THEN 'YES'
        ELSE 'NO'
      END AS wantsMail
FROM UserChoices
WHERE questionId = 3929

更新:添加用于更新现有值的语法:

UPDATE Users AS U
SET U.wantsMail = CASE c.answer WHEN 1 THEN 'YES' ELSE 'NO' END
FROM 
    Users AS U
    INNEr JOIN
    UserChoices AS C ON U.UserId = C.UserId
WHERE
    C.questionId = 3929

这当然是未经测试的,因为我没有您的数据库。但是,应该指出你正朝着正确的方向努力。