Sql 我如何排除只购买汽车的用户?

Sql 我如何排除只购买汽车的用户?,sql,Sql,Django查询中存在以下SQLfrom: SELECT "id", "name" FROM "polls_client" INNER JOIN "polls_purchases" ON ("id" = "client_id") WHERE "polls_purchases"."product" IN (car, bike) 我们

Django查询中存在以下SQLfrom:

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

我们需要从仅具有“car”采购记录的查询用户中进行选择。我想在数据库的一次选择中执行此操作。如何执行此操作?

您可以按客户端分组,并在HAVING子句中设置条件:

我们需要从仅具有“car”采购记录的查询用户中进行选择

最简单、最有效的方法不应存在:

特别是,这可以利用轮询_purchasesclient _id,product上的索引


我也会劝阻你不要用双引号来表示身份。它们只用于混乱查询。

显示示例输入数据和所需的最终结果。删除有购买记录且汽车和自行车不清楚的用户。您想从查询中排除它们还是从数据库中删除它们?COUNTDISTINCT。。。不是sargable。此查询还显示只买了自行车的人,但我只需要有自行车的人car@Fyzzys这不是你想要的吗?谁只买汽车还是自行车?@forpas对不起,我拼错了。我想把那些只买了一辆车的人带出来。这个查询适用于任何数量的购买。它只返回只购买汽车的用户。
SELECT pc.id, pc.name 
FROM polls_client pc INNER JOIN polls_purchases pp 
ON pc.id = pp.client_id 
GROUP BY pc.id, pc.name
HAVING SUM(CASE WHEN pp.product <> 'car' THEN 1 ELSE 0 END) = 0
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'
                 );