2015-10-13 84 views
-1

我有4列是目前NULL表中的数据,该表如下所示:如何更新一个表,我需要获取来自多个子查询

Users 
- userId 
- wantsMail YES or NO 

对于每4列我需要另一个表(UserChoices)执行基于行的查询,看起来像:

userId questionId answer (BIT) 
123  3929  1 

注:答案是一点,这样1已被翻译成“YES”,并0 'NO'

所以我必须去th粗略化用户表中的所有行,然后使用'UsersChoices'表更新列。对于每一列,我都有问题需要查找。

所以对于“wantsMail”的questionId将如1039

什么是去了解这样的查询的最佳方式

+0

没有最好的办法,如果你有一个方法可行,就使用它。 –

+0

您能否显示您尝试过的查询? – jhmt

回答

0

我相信这是你想要什么? - 它会插入所有行UserChoices其中questionId = 3929而转换成答案wantsMail:

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

UPDATE:添加语法更新现有值:

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 

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

+0

这是一个更新声明,而不是插入。所有的行都已经在表中,但列需要更新。 –

+0

废话 - 对不起 - 我想你想插入一个空表。更新的语法将会不同...敬请关注 –