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.pk
s 并为每个@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:对表的所有行执行连接的主要内容,如果未能解决你的问题,请参考以下文章