MySQL:对表的所有行执行连接

Posted

技术标签:

【中文标题】MySQL:对表的所有行执行连接【英文标题】:MySQL: Perform join on all rows of a table 【发布时间】:2015-09-15 10:06:36 【问题描述】:

我有一个视图,我在其中组合了一些规范化的表。基于“主”表,我加入连接表(例如JOIN child ON master.child_fk = child.pk)。这很简单。现在,我想扩展此查询以在某些特殊情况下对所有子行执行连接,例如如果master.child_fk 等于-1

我设法通过创建一个视图来复制所有行并将重复项中的 pk 设置为 -1 来获得工作查询,但这非常慢(我有很多数据)。通过遍历所有child.pks 并为每个@s 执行单独的连接可以产生相同的结果,但我无法想象会更快。

使用 mysql 解决此问题的最佳方法是什么?如果有不清楚的地方请提出问题。

编辑:我可以补充一点,我的尝试缓慢的原因似乎是索引利用率低。在此处查看附件EXPLAIN 输出https://i.imgur.com/8zfT0HM.png

【问题讨论】:

将你的加入条件替换为JOIN child ON CASE WHEN master.child_fk != -1 THEN master.child_fk = child.pk ELSE 1 END)你能粘贴你的查询吗? 我爱你。它工作得很好:) 我已将其更新为答案 【参考方案1】:

将您的加入条件替换为JOIN child ON CASE WHEN master.child_fk != -1 THEN master.child_fk = child.pk ELSE 1 END)

【讨论】:

以上是关于MySQL:对表的所有行执行连接的主要内容,如果未能解决你的问题,请参考以下文章

mysql用户操作表权限的问题(java)

MySQL小组分享大纲

mysql执行某种操作,卡死线程

如何在 PL/SQL 中设置特定日期对表的操作执行?

Mysql中的Join详解

MySQL系列- MySQL执行计划