Sql server 用于从包含模板和不同项数的表中读取的联接类型?
我有两个表格,一个包含问题(被视为“模板”): 其中包含这些问题的答案,由单独的客户ID值键入:Sql server 用于从包含模板和不同项数的表中读取的联接类型?,sql-server,join,Sql Server,Join,我有两个表格,一个包含问题(被视为“模板”): 其中包含这些问题的答案,由单独的客户ID值键入: |CustID |QuestionID|Answer | |----------|------------------| |1000 |1 |John | |1000 |2 |22 | |2000 |1 |Alice | |-----------------------------| 如您所见,客户1
|CustID |QuestionID|Answer |
|----------|------------------|
|1000 |1 |John |
|1000 |2 |22 |
|2000 |1 |Alice |
|-----------------------------|
如您所见,客户1000回答了问题1和2,而客户2000只回答了问题1
我需要按客户将它们加载到网页上的网格中,我想我只需在模板和应答表之间进行左外连接,就可以得到如下结果:
|CustID |QuestionID|Answer |
|----------|------------------|
|2000 |1 |Alice |
|2000 |2 |<null> |
|-----------------------------|
基本上,我需要SurveyQuestions
表中的所有记录,以及SurveyAnswers
中与CustomerID匹配的任何记录中的Answer
列的值
相反,我只是在SurveyAnswers
中得到一条记录,该记录有答案,因此在SurveyQuestions
中是匹配的(我猜是?)。我的意志力不强
我还尝试了UNION
和friends,但这两个表的结构不同,所以效果不太好
当然,我可以将问题和答案分开,并在我的C#代码中进行“合并”,但我想看看是否可以直接从存储过程中进行合并。谢谢 您遇到的问题是,在不匹配行上的外部联接(示例中的问题2)之后,不匹配表(SurveyAnswers)中该行的所有列的值都为NULL。其中包括CustId列。稍后执行的WHERE将看到NULL=@CustomerId并排除该行。要解决这个问题,您需要将条件移动到join子句中。因此,如果存在由“@CustomerId”给出的所有问题的答案,您需要询问SQL Server。您的查询正在询问(所有问题及其答案),但只返回“@CustomerId”已回答的记录
SELECT
q.QuestionID,
q.QuestionText,
a.CustID,
a.Answer,
FROM
SurveyAnswers a
RIGHT outer join SurveyQuestions q
on a.QuestionID = q.QuestionID
AND
a.CustID = @CustomerID;
你应该做到这一点。是的!成功了。从未想过
join
表达式可能有多个条件:\n非常感谢!
select
q.QuestionID,
q.QuestionText,
a.CustID,
a.Answer,
from
SurveyAnswers a
full outer join SurveyQuestions q
on a.QuestionID = q.QuestionID
where
a.CustID = @CustomerID
SELECT
q.QuestionID,
q.QuestionText,
a.CustID,
a.Answer,
FROM
SurveyAnswers a
RIGHT outer join SurveyQuestions q
on a.QuestionID = q.QuestionID
AND
a.CustID = @CustomerID;