【问题标题】:How to select IDs from a table if two conditions in other tables match如果其他表中的两个条件匹配,如何从表中选择 ID
【发布时间】:2010-08-29 12:57:26
【问题描述】:

我正在使用 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。

【问题讨论】:

    标签: sql sql-server


    【解决方案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)
    

    【讨论】:

    • 我在 SQL 方面相当缺乏经验 - 这个解决方案很棒,并且在我通读它时符合逻辑,但我在一个单独的 sql 文件中尝试了它以查看它会返回什么,但我不断收到“无效列” @moduleID 中的名称',即使我对我知道我提交反馈的模块ID 进行硬编码。有什么想法吗?
    • 抱歉!!我发现了问题——我。我没有在我的 moduleID 周围加上引号。再次感谢。你是个值得留胡子的巫师
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2011-04-20
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多