SQL JOIN 查找没有特定值的匹配记录的记录

2024-01-09

我正在尝试加快几年前为雇主的购买授权应用程序编写的一些代码的速度。基本上我有一个慢子查询,我想用 JOIN 替换它(如果它更快)。

当主管登录应用程序时,他会看到他尚未授权或拒绝的购买请求列表。该列表是通过以下查询生成的:

SELECT * FROM SA_ORDER WHERE ORDER_ID NOT IN
    (SELECT ORDER_ID FROM SA_SIGNATURES WHERE TYPE = 'administrative director');

sa_order 中只有大约 900 条记录,sa_signature 中只有大约 1800 条记录,并且该查询仍然需要大约 5 秒的时间来执行。我尝试使用 LEFT JOIN 来检索我需要的记录,但我只能获取 sa_order 记录,在 sa_signature 中没有匹配记录,并且我需要 sa_order 记录“没有与‘行政主管’类型匹配的记录” ”。非常感谢您的帮助!

两个表的架构如下:

涉及的表具有以下布局:

CREATE TABLE sa_order
(
    `order_id`        BIGINT       PRIMARY KEY AUTO_INCREMENT,
    `order_number`    BIGINT       NOT NULL,
    `submit_date`     DATE         NOT NULL,
    `vendor_id`       BIGINT       NOT NULL,
    `DENIED`          BOOLEAN      NOT NULL DEFAULT FALSE,
    `MEMO`            MEDIUMTEXT,
    `year_id`         BIGINT       NOT NULL,
    `advisor`         VARCHAR(255) NOT NULL,
    `deleted`         BOOLEAN      NOT NULL DEFAULT FALSE
);

CREATE TABLE sa_signature
(
    `signature_id`        BIGINT          PRIMARY KEY AUTO_INCREMENT,
    `order_id`            BIGINT          NOT NULL,
    `signature`           VARCHAR(255)    NOT NULL,
    `proxy`               BOOLEAN         NOT NULL DEFAULT FALSE,
    `timestamp`           TIMESTAMP       NOT NULL DEFAULT NOW(),
    `username`            VARCHAR(255)    NOT NULL,
    `type`                VARCHAR(255)    NOT NULL
);

创建索引sa_signatures (type, order_id).

不需要将查询转换为LEFT JOIN unless sa_signatures允许空值order_id。有了索引,NOT IN也会表现出色。不过,以防万一您好奇:

SELECT  o.*
FROM    sa_order o
LEFT JOIN
        sa_signatures s
ON      s.order_id = o.order_id
        AND s.type = 'administrative director'
WHERE   s.type IS NULL

你应该选择一个NOT NULL专栏来自sa_signatures为了WHERE条款以表现良好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL JOIN 查找没有特定值的匹配记录的记录 的相关文章

  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • 将sql查询结果写入mysql中的文件

    我正在尝试使用 mysql 将查询结果写入文件 我在一些地方看到了有关 outfile 构造的一些信息 但似乎这只将文件写入正在运行 MySQL 的机器 在本例中是远程机器 即数据库不在我的本地机器上 或者 我还尝试运行查询并从 mysql
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所
  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 如何查找所有mysql表之间的所有关系?

    如何找到MySQL所有表之间的所有关系 例如 如果我想知道大约有 100 个表的数据库中表的关系 有什么办法知道这个吗 从编程角度来说 更好的方法是从以下位置收集数据 INFORMATION SCHEMA KEY COLUMN USAGE表
  • PostgreSQL & regexp_split_to_array + 取消嵌套

    我有这样的绳子 测试1 纽约 X 测试 2 芝加哥 Y 测试 3 宾夕法尼亚州哈里斯堡 Z 我需要的结果是 Column1 Column 2 Column3 Test 1 new york X Test 2 chicago Y Test 3
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • oracle lag 函数与 group by

    我有一个查询忽略从前一个值增加的值 例如 采用下表 col1 col2 col3 5 1 A 4 2 A 6 3 A 9 4 B 8 5 B 10 6 B 现在进行以下查询 select col1 from select col1 lag
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • SQL Like 带有子查询

    我怎样才能做到这一点 SELECT FROM item WHERE item name LIKE SELECT equipment type FROM equipment type GROUP BY equipment type 内部子查询
  • Django:使用 Django ORM 实现 JOIN?

    我有一个用 Django 构建的问答类型的网站 具有以下模型 class Question models Model title models CharField max length 70 details models TextField
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • SQL 查询结果为字符串(或变量)

    是否可以将SQL查询结果输出到一个字符串或变量中 我的php和mysql不好 假设我有数据库 agents 其中包含列 agent id agent fname agent lname agent dept 使用此查询 sql SELECT
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 如何将变量设置为触发器 MYSQL 内存储过程的结果?

    我这里有一个小问题 我正在为我的数据库工作创建一个触发器 但我不知道如何在触发器内使用存储过程 我想将过程的结果保存在变量中 然后使用稍后在 IF 比较器上变量 这是我的代码 DELIMITER CREATE TRIGGER insert
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS
  • SQL Server 标识列值从 0 而不是 1 开始

    我遇到了一个奇怪的情况 数据库中的某些表的 ID 从 0 开始 即使 TABLE CREATE 的 IDENTITY 1 1 也是如此 对于某些表来说是这样 但对于其他表则不然 它一直有效到今天 我尝试过重置身份列 DBCC CHECKID

随机推荐

  • Angularjs 可以在多个 ng-app 中重用一个服务吗

    我正在尝试创建一个将使用多个角度ng应用程序的网络应用程序 并且至少两个可以使用相同的服务代码 它们不需要共享数据 但它们执行类似的功能 那么我如何避免代码重复 那是 myApp1 factories factory myservice f
  • 表中的 html 表有效吗?

    在html中 表内有表是否有效 table tr td table tr td td tr table td tr tr tr table 是的 完全有效 通过将您所拥有的内容粘贴到 W3C 验证器中 唯一的错误是关于文档类型 头标签等 没
  • 用纯Java学习JavaCV [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在努力学习JavaCV 众所周知 缺乏这方面的教材是一个很大的问题 在JavCV主页上 他们为 O
  • React Native开发服务器返回响应错误代码500

    错误 捆绑失败 错误 无法解析模块 react transform hmr lib index js from P React Native TryReactNative App js 模块 react transform hmr lib
  • ExponentialBackoffRetry 如何与 Azure 函数的 ServiceBus 触发器配合使用?

    我想在我的Azure函数中实现一个非常简单的行为 如果在处理过程中出现异常 我想推迟下一次重试一段时间 据我所知 在服务总线中没有直接的可能性 例如 除非创建一条新消息 但服务总线触发器有可能ExponentialBackoffRetry
  • “mean_squared_error”的负值

    我正在使用 scikit 并使用mean squared error作为 cross val score 中模型评估的评分函数 rms score cross validation cross val score model X y cv
  • 将多个列表 传递到 ArrayAdapter

    我从 活动 中开始 adapter new ItemAdapter Items this items totals setListAdapter adapter 现在这是 ItemAdapter public class ItemAdapt
  • 如何打开.sqlite-wal

    我想从 Mac 应用程序导出我的 Shazamed 标签 该应用程序不提供任何导出选项 Mac 版 Shazam 将它们存储在 sqlite 3 数据库中 该应用程序正在生成 3 个文件 ShazamDataModel sqlite Sha
  • 如何使用 MinGW 在 Windows 中构建 Google 的 protobuf?

    我使用 Code Blocks 作为 MingW 的 IDE 我正在尝试使用谷歌协议缓冲区 但我在构建 protobuf 时遇到了麻烦 protobuf 的自述文件说 如果您使用 Cygwin 或 MinGW 按照上面的 Unix 安装说明
  • 从 Netbeans 项目中删除文件,但不从硬盘中删除文件

    我的项目文件夹中有很多文件 但我不想将它们全部放在我的 Netbeans 项目中 Netbeans 还会使用更多内存和时间自动扫描它们 有没有办法从 Netbeans 项目中排除文件 文件夹 使用 Netbeans 7 3 的解决方案 在
  • 如何在 jquery 中创建查询字符串?

    我被困在这个问题上 我想在动态过滤器上创建查询字符串 现在我已经添加了过滤器类型Select your favorite sports and Select your favorite food 所以将来将会有更多的过滤器 并且只会出现在复
  • 创建 UNIX shell

    我想为 UNIX 创建一个迷你 shell 只是为了了解一切的来龙去脉 我对过去认为理所当然的事情有些困惑 这是一个有点哲学的问题 当我创建一个 shell 时 我假设我有一个没有 shell 的 UNIX 那么在这种情况下 std in
  • 串行或并行:Robo 测试实验室的设备测试顺序

    当我在 Robo 测试实验室上使用多个物理设备运行测试配置时 从 firebase 控制台或通过将应用程序上传到 Play 商店 这些设备是并行运行还是串行运行 如果设备并行运行 由于测试设备之间共享相同的设置参数 我的机器人设置脚本将无法
  • 在 Windows 与 Mac 上更改 ggplot2 中的字体

    我在 Mac 上使用 ggplot2 创建了一个绘图 我将字体更改为 Times New Roman 效果很好 library extrafont ggplot data df stat density aes x R1 colour rh
  • 将查找和替换对话框重置为 Visual Studio 中的当前文档

    有没有办法在 Visual Studio 中强制 查找 和 替换 对话框自动选择当前文件在 查找范围 下拉列表中 它应该仅在重新打开对话框时执行此操作 我经常忘记从整个解决方案或项目切换回来 最终浪费了大量时间等待 VS 搜索包括设计器文件
  • Kotlin 1.2.50 要求提供 baseFeatureInfoDir

    当我切换 Android 项目时 classpath com android tools build gradle 3 2 0 alpha18 to classpath org jetbrains kotlin kotlin gradle
  • 在 Java 中复制数据的更快方法?

    我接到一项从服务器复制数据的任务 我在用BufferedInputStream和输出流来复制数据 我正在逐字节地进行 尽管它正在运行 但复制数据需要很长时间 因为其中一些数据有 100 MB 所以它肯定不会工作 任何人都可以建议我使用逐字节
  • 在 xsd 中定义 xml,其中属性决定可能的内容

    如何在 xsd 中定义这样的东西
  • vim中ctrl-v粘贴时如何输入^M

    我的vim使用ctrl v是粘贴快捷方式 这与需要ctrl v作为快捷方式前缀的命令冲突 例如 M need ctrl v ctrl m 我可以在 vim 命令行中执行此操作 并且无需初始化即可在 vim 中执行此操作 但该符号不会从 vi
  • SQL JOIN 查找没有特定值的匹配记录的记录

    我正在尝试加快几年前为雇主的购买授权应用程序编写的一些代码的速度 基本上我有一个慢子查询 我想用 JOIN 替换它 如果它更快 当主管登录应用程序时 他会看到他尚未授权或拒绝的购买请求列表 该列表是通过以下查询生成的 SELECT FROM