sql - 选择在连接表中没有相应连接的行

标签 sql postgresql join

我有两个 SQL 表 - 客户和小部件。它们之间有一个连接表 customers_widgets,它有两列(customer_id 和 widget_id)

有没有一种方法可以选择所有未加入小部件的客户?所以他们的 ID 没有出现在连接表的 customer_id 列中?

最佳答案

总的来说,我发现 NOT IN 既昂贵又缓慢,但您的里程可能因不同的 RDBMS 而异。

我最常用的两个替代方案是:

SELECT
    *
FROM
    customer
WHERE
    NOT EXISTS (SELECT *
                  FROM customers_widgets
                 WHERE customers_widgets.customer_id = customer.customer_id 
               )

还有……

SELECT
    customer.*
FROM
    customer
LEFT JOIN
    customers_widgets
        ON  customers_widgets.customer_id = customer.customer_id
WHERE
    customer_widgets.customer_id IS NULL

关于sql - 选择在连接表中没有相应连接的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32587227/

相关文章:

mysql - 在单个 sql 查询中一起使用 JOIN 和 group by

mysql - sql查询错误1060重复列错误 'nome'

sql - 如何将数据库部署到 windows azure sql 数据库?

sql - T-SQL 中的 DateTimeOffset.Now

php - 多选查询数据库

sql-server - 从 SQL Server 到 PostgreSQL 的数据传输

SQL计算到本月第一天的天数

sql - 按位运算符 Postgres

PostgreSQL 负整数溢出

mysql - 复杂的 3 方式 SQL 连接(其中表 3 必须在连接表 1 之前连接表 2)