首页 > 解决方案 > 如何排除只买车的用户?

问题描述

有这个 SQL(来自 Django)查询:

SELECT "id", "name" 
FROM "polls_client" INNER JOIN "polls_purchases" 
ON ("id" = "client_id") 
WHERE "polls_purchases"."product" IN (car, bike)

我们需要从查询中选择只有购买记录的用户'car'。我想对数据库进行一次选择。我该怎么做呢?

标签: sql

解决方案


我们需要从查询中选择只有“汽车”购买记录的用户。

最简单、最有效的方法应该是not exists

SELECT c.*
FROM "polls_client" c
WHERE NOT EXISTS (SELECT 1
                  FROM "polls_purchases" pp
                  WHERE c."id" = pp."client_id" AND pp."product" <> 'car'
                 );

特别是,这可以利用上的索引polls_purchases(client_id, product)

我也会劝阻您不要使用双引号作为标识。它们只会使查询变得混乱。


推荐阅读