【问题标题】:MySQL: Perform join on all rows of a tableMySQL:对表的所有行执行连接
【发布时间】: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)你能粘贴你的查询吗?
  • 我爱你。它工作得很好:)
  • 我已将其更新为答案

标签: mysql join view


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    相关资源
    最近更新 更多