如果其他表中的两个条件匹配,如何从表中选择ID

时间:2010-08-29 12:57:26

标签: sql sql-server

我正在使用ASP.NET和C#开发用户反馈系统。我有多个表,我正在尝试填充下拉列表,以便可以过滤反馈。

我的桌子:

CREATE TABLE tblModules
(
Module_ID nvarchar(10) PRIMARY KEY,
Module_Title nvarchar(MAX) NOT NULL
);

CREATE TABLE tblQuestions
(
Q_ID int PRIMARY KEY IDENTITY(1,1),
Question_Text varchar(1000) NOT NULL

);

CREATE TABLE tblFeedback
(
Submission_ID int PRIMARY KEY IDENTITY(1,1),
Username varchar(100) NOT NULL,
Domain varchar(50) NOT NULL,
DateTime_Submitted datetime NOT NULL
Module_ID nvarchar(10)
FOREIGN KEY (Module_ID) REFERENCES tblModules (Module_ID);
);

CREATE TABLE tblAnswers
(
Q_ID int NOT NULL,
Submission_ID int NOT NULL,
Answer_Text varchar(max),
FOREIGN KEY (Q_ID) REFERENCES tblQuestions(Q_ID),
FOREIGN KEY (Submission_ID) REFERENCES tblFeedback(Submission_ID)
);

我有两个下拉列表。第一个填充表中的所有模块。第二个需要填充来自tblQuestions的问题,但只有当它存在任何答案时(因此如果问题ID'Q_ID'存在于tblAnswers中)。

我可以从第一个下拉列表中获取selectedModuleID。我有一个TblAnswers中Q_ID引用的所有问题的列表。如何使用模块ID交叉引用此列表?

每个反馈提交都会获得提交ID和模块ID。

2 个答案:

答案 0 :(得分:1)

你想:

  • 有答案的问题
  • 具有模块父级的问题(通过tblfeedback)

所以,我猜你想要什么:

SELECT
   *
FROM
   tblQuestions Q
WHERE
   EXISTS (SELECT *
      FROM
          tblAnswers A
          JOIN
          tblFeedback F ON A.Submission_ID = F.Submission_ID
      WHERE
          Q.Q_ID = A.Q_ID AND F.Module_ID = @moduleID)

答案 1 :(得分:0)

这应该可以解决问题......

SELECT Q_ID, Question_Text tblQuestions a 
WHERE EXISTS (SELECT NULL FROM tblAnswers a WHERE a.Q_ID = q.Q_ID)