【问题标题】:simple sql query containing 'in'-clause, checking for better syntax包含“in”子句的简单 sql 查询,检查更好的语法
【发布时间】:2012-10-31 01:06:02
【问题描述】:

我想知道执行 SQL 查询的最佳方式。 我有一个表,其中包含与文章相关的主题(每篇文章至少包含 2 个主题)。 用户正在搜索两个 SUBJECTS,我需要回复所有文章。

我有一个如下所示的表格:

SubjectID ---> 键

文章ID

我的查询如下:

SELECT  ArticleID
FROM    tblSubjectsInArticles
WHERE   SubjectID = @pSubjectID1
        AND ArticleID IN (SELECT ArticleID FROM tblSubjectsInArticles WHERE SubjectID = @pSubjectID2);

我感觉有更好的方法来执行这项任务,可能是高效的查询或不同的数据结构。也许你们中的一个人知道更好的方法,或者您可以放心,这是最好的方法。谢谢。

【问题讨论】:

  • 哪个 DBMS?甲骨文? PostgreSQL?
  • 在 SQL Server 中,您问题中的查询可能比您接受的答案中的查询更有效。此外,该答案中的一个具有不同的语义,因为它可以带回您需要使用DISTINCT 删除的重复项

标签: sql sql-server in-clause


【解决方案1】:
select distinct s1.ArticleID
from   tblSubjectsInArticles s1
         join tblSubjectsInArticles s2 
           on s1.ArticleID = s2.ArticleID
where  s1.SubjectID = @pSubjectID1
   and s2.SubjectID = @pSubjectID2

因此,您将在 ArticleID 上创建一个连接表并过滤相关主题。 distinct 确保您的列表仅包含唯一的 ArticleID

【讨论】:

  • SubjectID 如何与INNER JOIN 同时等于两个不同的值(因为AND)?
猜你喜欢
  • 2017-10-17
  • 2019-10-01
  • 2014-01-02
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2017-01-30
相关资源
最近更新 更多