【问题标题】:How to select the relative complement of a table B in a table A (A \ B) in an SQL-Query?如何在SQL查询中选择表A(A \ B)中表B的相对补码?
【发布时间】:2011-06-25 12:15:15
【问题描述】:

我有两张桌子:

  1. 主题: [id, ...]

  2. 分类: [subject.id, ...]

我想从表 #1 中选择所有科目,而不是 #2(类别)中的条目。

任何提示表示赞赏(:

最好的问候

【问题讨论】:

    标签: sql mysql select


    【解决方案1】:
    select * from subjects where id not in (select subject.id from categories )
    

    【讨论】:

    • 感谢您的重播。很容易(:
    【解决方案2】:

    Sachin 已经提供了正确答案,但您也可以使用连接语法:

    SELECT
      subjects.*
    FROM
      subjects
    LEFT OUTER JOIN
      categories
    ON
      subjects.id = categories.subject_id
    WHERE
      categories.subject_id IS NULL
    

    【讨论】:

    • 感谢您添加。 Sachins 的方式看起来更容易(也许更快),但我选择了你的方式,因为 Sachins 的建议在通过活动记录实施时遇到了一些麻烦。
    • +1 用于连接。再次是 Join vs subquery 的经典案例...... :)
    • 对于 MySQL,连接语法几乎总是相等的(因为规划器将子查询重写为连接)或更快。查询计划器很笨,并且经常在子查询上对索引使用做出错误的选择。
    • 我测试了两个查询,加入的那个更快,也许可以通过添加一些索引来改进子查询
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2013-03-31
    • 2022-01-19
    • 2019-05-16
    相关资源
    最近更新 更多