【问题标题】:In SQL, how can I perform a "subtraction" operation?在 SQL 中,如何执行“减法”操作?
【发布时间】:2011-01-31 23:54:37
【问题描述】:

假设我有两个表,它们都有用户 ID。我想执行一个操作来返回表 1 中所有不在表 2 中的用户 ID。我知道必须有一些简单的方法来做到这一点 - 谁能提供一些帮助?

【问题讨论】:

  • 您使用的是什么数据库平台?

标签: sql database relational-algebra


【解决方案1】:

它很慢,但您通常可以使用“不在”之类的内容来完成此操作。 (各种 RDBMS 系统中还有其他功能可以更好地做到这一点,例如 Oracle 有一个 'exists' 子句可以用于此。

但你可以说:

select id from table1 where id not in (select id from table2)

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点。这是使用NOT EXISTS的一种方法:

    SELECT userid
    FROM table1
    WHERE NOT EXISTS
    (
        SELECT *
        FROM table2
        WHERE table1.userid = table2.userid
    )
    

    这是使用连接的另一种方法:

    SELECT table1.userid
    FROM table1
    LEFT JOIN table2
    ON table1.userid = table2.userid
    WHERE table2.userid IS NULL
    

    最快的方法取决于数据库。

    【讨论】:

      【解决方案3】:

      如果您的 TSQL 方言支持,一种方法是使用EXCEPT。相当于进行左连接和空测试

      【讨论】:

        【解决方案4】:
        SELECT user_id FROM table1 LEFT JOIN table2 ON table1.user_id = table2.user_id WHERE table2.user_id IS NULL;
        

        【讨论】:

          【解决方案5】:

          如果是 SQL 服务器:

          SELECT id FROM table1
          EXCEPT 
          SELECT id FROM table2
          

          甲骨文:

          SELECT id FROM table1
          MINUS
          SELECT id FROM table2
          

          休息:不确定....

          【讨论】:

            【解决方案6】:

            试试这个:

            SELECT id FROM table1 WHERE id NOT IN
            (
                SELECT id FROM table2
            )
            

            【讨论】:

              【解决方案7】:
              select ID from table1
              where ID not in (select ID from table2)
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-02-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-04-25
                相关资源
                最近更新 更多