具有特定基数的映射(联结)表之间的联接

2024-04-13

我有一个关于执行特定联接的最有效方法的简单问题。

就拿这三张表来说,为了保护无辜,已经改了实名:

表:动物



animal_id   name   ...
======================
1           bunny
2           bear
3           cat
4           mouse
  

表:标签



tag_id     tag
==================
1          fluffy
2          brown
3          cute
4          small
  

映射表:animal_tag



animal_id   tag_id
==================
1           1
1           2
1           3
2           2
3           4
4           2
  

我想找到所有标记为“的动物”fluffy', 'brown', and 'cute'。也就是说动物必须被标记与所有三个。实际上,所需标签的数量可能会有所不同,但与本讨论无关。这是我提出的查询:

SELECT * FROM animal
JOIN (
      SELECT at.animal_id FROM animal_tag at
      WHERE at.tag_id IN (
                          SELECT tg.tag_id FROM tag tg
                          WHERE tg.tag='fluffy' OR tg.tag='brown' OR tg.tag='cute'
                          )
      GROUP BY at.animal_id HAVING COUNT(at.tag_id)=3
      ) AS jt
ON animal.animal_id=jt.animal_id

在包含数千个“动物”和数百个“标签”的表上,此查询的执行时间相当......数十毫秒。然而,当我查看查询计划(Apache Derby 是数据库)时,优化器的估计成本相当高(9945.12)并且计划相当广泛。对于这种“简单”的查询,我通常尝试获取估计成本为一位数或两位数的查询计划。

所以我的问题是,有没有更好的方法来执行这个查询?看起来像是一个简单的查询,但我一直很难想出更好的方法。


您可以使用创建临时表声明全局临时表 http://db.apache.org/derby/docs/10.0/manuals/reference/sqlj33.html然后进行 INNER JOIN 以消除“W​​HERE IN”。使用基于集合的联接通常比必须对每一行进行评估的Where语句更有效。

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

具有特定基数的映射(联结)表之间的联接 的相关文章

  • 实体框架..自引用表..获取深度=x的记录?

    我成功地在实体框架中使用自引用表 但我不知道如何获得所需深度的记录 这应该是什么逻辑 Model public class FamilyLabel public FamilyLabel this Children new Collectio
  • 如何使用 SQLalchemy 连接三个表并将所有列保留在其中一个表中?

    所以 我有三张表 类定义 engine create engine sqlite test db echo False SQLSession sessionmaker bind engine Base declarative base cl
  • 两种 SQL 连接符号有什么区别?

    SQL 1 select from t1 join t2 on t1 f1 t2 f2 SQL 2 select from t1 t2 where t1 f1 t2 f2 他们返回的结果是相同的 它们之间有什么区别吗 例如 DBMS 如何运
  • Windows 批处理文件中的 SQL 语句

    有没有办法让Windows批处理文件直接输入SQL语句而不需要调用脚本 我希望批处理文件登录SQL 然后直接输入语句 EDIT 我正在使用 Oracle v10g 对于单个命令 您可以使用以下技巧 echo select from dual
  • 如何在 BigQuery 中取消透视?

    不确定要调用什么函数 但转置是我能想到的最接近的函数 I have a table in BigQuery that is configured like this 但我想查询一个配置如下的表 创建此表的 SQL 代码是什么样的 Thank
  • 在自引用表中查询父项和子项

    我有一个Comments如下表所示 在MySQL content created at id parent id second comment 2014 06 03T10 08 44 0000 37 1 third comment 2014
  • 如何保证auto_increment数字没有间隙?

    我有一个关于自动递增的问题 这是我的表 我首先拥有它 它可以顺利地递增 id id name 1 name1 2 name2 3 name3 4 name4 5 name5 6 name6 但是当我删除一条记录并插入一条新记录时 id从7开
  • SQL 数据范围最小值最大值类别

    我想确定 2 个类别的范围 A 类和 B 类 A 从 1 到 15 开始 B 从 16 到 31 开始 然后 A 再次从 32 到 40 开始 现在如果运行此查询 select min range max range from table
  • SQL Server T-SQL 中的 REGEXP_LIKE 转换

    我在一份需要转换为 SQL Server 的旧报告中遇到了这一行 REGEXP LIKE examCodes learner code examCodes 是源 learner code 是模式 我知道 SQL Server 没有 REGE
  • WebMatrix sql LIKE %

    我在执行以下查询时遇到问题 当我使用静态参数直接从 WebMatrix 执行它并返回几行时 它可以工作 但不能从我的 cshtml 页面执行 var accounts database Query SELECT Username Email
  • 为什么 T-SQL 块即使不应该执行也会给出错误?

    我正在编写一个 看似 直接的 SQL 片段 它在确保列存在后删除该列 问题 如果该列不存在 则代码insideIF 子句抱怨它找不到该列 出色地 doh 这就是为什么它位于 IF 子句内 所以我的问题是 为什么一段不应该执行的代码会出错 这
  • Oracle 中的 TO_Char 数字格式模型

    我不完全理解如何使用 to char 函数将数字转换为具有适当格式模型的字符串 实际数字具有以下格式 使用逗号作为小数点分隔符 始终为 5 个小数 整数最多可达 6 可能是无限的 但目前绝不会超过 6 数字可以是正数或负数 数字可以以 0
  • PostgreSQL 索引使用分析

    是否有工具或方法可以分析 Postgres 并确定应创建哪些缺失的索引 以及应删除哪些未使用的索引 我在使用 SQLServer 的 分析器 工具执行此操作方面有一些经验 但我不知道 Postgres 中是否包含类似的工具 我喜欢这样来查找
  • MS-Access:合并彼此“下方”的两个表

    我的 Access 数据库中有两个表 它们看起来像这样 Table1 Kabelnummer Column1 Column2 Column3 1 x x x 2 x x x
  • 从有序结果集中查找“运行”行

    我试图找出一种方法来识别满足某些条件的 运行 结果 按顺序连续行 目前 我正在订购结果集 并通过眼睛扫描特定模式 这是一个例子 SELECT the date name FROM orders WHERE the date BETWEEN
  • 如何在 WHERE 子句中最佳地使用 COALESCE() ?

    这是我的查询 select coalesce qa2 subject qa subject as question subject qa body select count from viewed items vi where coales
  • 在SQL Server中,not(columnName='value')和columnName<>'value'之间有什么区别吗?

    在 SQL Server 的 where 子句中 无论您编写代码有什么区别not columnName value or columnName lt gt value 我正在考虑性能方面的问题 有人告诉我 当使用 Not 时 它可能不会使用
  • Laravel 5.4 上传原始文件名和扩展名

    通过表单提交文件时 如何将原始文件名 file jpg 上传到数据库 控制器 public function addCv Request request cv Cv create request gt all file request gt
  • 是否可以使用不在 GROUP BY 中的 ORDER BY 列?

    正如标题所说 这是我的代码 SELECT material SUM Amount AS Amount RIGHT CONVERT varchar 50 date in 106 8 FROM rec stats GROUP BY materi
  • MySQL/Postgres查询5分钟间隔数据

    我需要查询方面的帮助 假设这是表中的数据 timestamp 2010 11 16 10 30 00 2010 11 16 10 37 00 2010 11 16 10 40 00 2010 11 16 10 45 00 2010 11 1

随机推荐

  • 如何对 REST-Web 服务进行逆向工程

    我目前正在尝试对私有 REST Web 服务进行逆向工程 该服务缺乏文档 我唯一知道的是 它是使用 ZendFramework 用 PHP 编写的 是否有任何简单的方法可以找出允许哪些操作以及我必须提供哪些参数才能使服务正常工作 问候 抢
  • 运行 php artisan 后找不到类“PackageVersions\Versions”

    我正在使用 MacO 并有一个 Laravel 项目 跑步composer update产生 Class PackageVersions Versions not found 运行composer install同样的事情 乃至php ar
  • CSS选择器:如何选择非元素兄弟节点?

    根据这里的规范 http www w3 org TR CSS21 selector html adjacent selectors http www w3 org TR CSS21 selector html adjacent select
  • JPA。如何返回 null 而不是 LazyInitializationException

    我有两个具有 一对多 关系的表 我使用 Jpa Spring JpaRepository 有时我必须使用内部对象从数据库获取对象 有时我不必这样做 存储库总是返回带有内部对象的对象 我尝试从数据库中获取 所有者 但总是得到 Set book
  • 将模型属性作为参数传递给 javascript 函数时,Razor 视图中出现语法错误

    I get a Syntax error在每个逗号上 和最后一个括号 在下面的代码中 javascript 函数位于另一个文件中 如下所示 Filters priceRangeInit function min max from to pr
  • TaskStackBuilder#startActivities() NullPointerException

    我在 4 4 2 和 4 4 3 设备上不断发生崩溃 尽管我不确定这是 API 问题 在某些情况下ParsePushBroadcastReceiver下面的代码会导致NullPointerException内心深处的某处startActiv
  • 由于 Toast 和 OnClickListener 的组合无效而导致错误

    我正在尝试使用Toast inside OnCLickListener 我的代码触发以下错误 The method makeText Context CharSequence int in the type Toast is not app
  • Google 表格 - 找不到脚本函数

    我正在努力将 Google 表格文档中的图像链接到另一个选项卡中的特定单元格 我通过构建一个简单的函数来做到这一点 但是 当我分配该函数然后单击图像时 我收到错误 找不到脚本函数 测试 当我在脚本管理器界面中运行该函数时 它工作正常 当我尝
  • 隐藏数千个
  • 元素的最快方法?
  • 我有一个自动完成表单 用户可以在其中输入一个术语 它会隐藏所有内容 li 不包含该术语的元素 我最初循环了所有 li li 与 jQuery 的each并应用了 hide 那些不包含该术语的 这太慢了 我发现更快的方法是循环遍历所有 li
  • 如何创建在 Visual Studio Code 中运行的 Java/Maven 项目?

    我正在尝试创建一个 Maven 项目 以便我可以在根文件夹中编译 Java 文件 并在另一个文件夹中输出类文件 我已经下载了maven 我正在尝试与 VS Code 集成 我的目标是在 VS Code 中编辑 java 文件 并在保存时编译
  • 在 Objective C 中使用 static init 有什么好处?

    最近我发现来自 Github 的 webrtc ios 示例 https github com gandg webrtc ios 当我浏览该项目时 我注意到 VideoView 类使用静态方法 但我不确定这是否必要 VideoView 是
  • Postgis - 如何通过 JDBC 使用数据类型“地理”

    从事一个网络项目 该项目使用postgresql 9 3 postgis 2 1 有一个类型的列geography在表中 它只存储一个point 现在我需要通过 JDBC 使用 Java 对象插入 选择类型 看完之后postgis手册 没有
  • 手动身份验证检查 Symfony 2

    我正在开发一个 Symfony 2 应用程序 用户必须在登录过程中选择一个配置文件 用户可能有多个配置文件可供使用 并且他们只知道自己的配置文件 因此 首先 我需要提示输入用户名和密码 如果这些正确 我不应该登录用户 我需要提示用户在会话期
  • NodeJs 中单线程和非阻塞 I/O 操作有什么区别?

    我一直在阅读并浏览尽可能多的 NodeJs 代码 但我对此有点困惑 Node 单线程和非阻塞 I O 到底意味着什么 我可以通过生成子进程来实现第一个 通过使用异步库来实现第二个 但我想弄清楚它的含义以及非阻塞 I O 如何仍然会减慢您的应
  • 创建产品 SDK:如何使用我正在创建的 SDK 添加本机库 (.so) 和 jar?

    我正在创建一个小部件 我们将提供给开发人员最终用户 它由 jar和一个本机库 so 使用 NDK 构建 JAR 有一个动态库的 JNI 接口 关于如何包含外部内容非常清楚 jar在项目中但没有如何包含依赖的动态库 我如何打包并构建 jar
  • EF Core 3 - 在Where子句中使用字符串的扩展方法

    我有一个简单的字符串扩展方法 public static class FrenchStringExtensions public static string ReplaceAccents this string str return str
  • Rails 3.1 Asset Pipeline 和 Uglifier 中可能存在的错误

    我在 Heroku 上部署时遇到了问题 导致 rake 任务失败 rake assets precompile 底部是集成时出现的错误 轨道3 1 Jquery 日历 https github com themouette jquery w
  • React 自定义挂钩内的 Apollo GraphQL 查询

    我正在尝试列出 Rick Morty API 中的所有角色 我编写了以下钩子以在我的组件中使用 该组件将呈现结果 当我对值进行硬编码时 例如 page 1 filter name Rick 查询运行得很好 如果我尝试使用变量 它会返回错误
  • 使用 WCF 使用 RESTful JSON API

    我是 WCF 的新手 而且一般对 NET 很生疏 所以很可能这是一个已回答的问题 但我只是错过了它 我正在构建一个 ASP NET MVC 应用程序 它将使用基于 RESTful JSON 的 API 作为后端 我一直在研究如何与 NET
  • 具有特定基数的映射(联结)表之间的联接

    我有一个关于执行特定联接的最有效方法的简单问题 就拿这三张表来说 为了保护无辜 已经改了实名 表 动物 animal id name 1 bunny 2 bear 3 cat 4 mouse 表 标签 tag id tag 1 fluffy