我有一个包含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
这样的查询的最佳方法是什么?
答案 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
这当然是未经测试的,因为我没有您的数据库。但是,应该指出你正朝着正确的方向努力。