sql - 如何排除只买车的用户?
问题描述
有这个 SQL(来自 Django)查询:
SELECT "id", "name"
FROM "polls_client" INNER JOIN "polls_purchases"
ON ("id" = "client_id")
WHERE "polls_purchases"."product" IN (car, bike)
我们需要从查询中选择只有购买记录的用户'car'
。我想对数据库进行一次选择。我该怎么做呢?
解决方案
我们需要从查询中选择只有“汽车”购买记录的用户。
最简单、最有效的方法应该是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)
。
我也会劝阻您不要使用双引号作为标识。它们只会使查询变得混乱。
推荐阅读
- javascript - 单击单选按钮时,显示文本输入控件,尝试输入文本会关闭应用程序
- vb.net - 将属性值获取到字符串 vb.net
- java - 使用 lambdas 提取包含在 ArrayList 中的 Object 属性
- node.js - 第一个参数未使用的 vscode 警告,但我使用后面的参数
- python - Python.Net:使用 Python.Net 在第二个 appdomain 中加载第二个窗口
- mysql - Mybatis delete 返回负值。这是为什么?
- mysql - 搜索和替换空数据的查询
- reactjs - 如何解决:错误:动作必须是普通对象。使用自定义中间件进行异步操作
- automated-tests - 机器人框架:参数化的 GUI 元素
- python - 基于两个变量的数据集分割成4个段