我有两张表,一张包含问题(被认为是“模板”):
|QuestionID|QuestionText |
|----------|------------------|
|1 |What is your name?|
|2 |What is your age? |
|-----------------------------|
还有一个包含这些问题的答案,由一个单独的客户 ID 值键入:
|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> |
|-----------------------------|
因此,在这种情况下,cust #2000 将返回Answer
问题 #2 的列为空,并且应用程序将知道需要回答它。这是我尝试过的 SQL 的一个示例,但无论我使用多少个OUTER
等组合,我都无法让它与单个查询一起使用:LEFT
JOIN
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
基本上我需要表中的所有记录,以及与 CustomerID 匹配的任何记录中SurveyQuestions
的列值。Answer
SurveyAnswers
相反,我只得到一个SurveyAnswers
有答案的记录,因此是匹配的(我猜?)在SurveyQuestions
. 我的 SQL-fu 不强。
我也试过UNION
和朋友们,但两张桌子有不同的结构,所以效果不太好。
我当然可以分别提取问题和答案,并在我的 C# 代码中进行“合并”,但我想看看是否可以直接从存储过程中进行。谢谢!