首页 > 解决方案 > 如何在 5 个嵌套表上执行 MySQL 左连接?

问题描述

我有以下数据库结构:

在此处输入图像描述

其中prefix_dt表与prefix_ueprefix_di直接prefix_di连接,表与prefix_drprefix_dp直接连接。

我目前正在运行以下 MySQL 查询以从所有 5 个表中获取数据:

SELECT 
  SQL_CALC_FOUND_ROWS pdt.id as id, 
  CONCAT(
    pue.first_name, ' ', pue.last_name
  ) as name, 
  pdi.download, 
  pdi.version as version, 
  pdi.release_title, 
  pdt.accepted_licence as accepted_licence, 
  pdt.download_date as download_date 
FROM 
  prefix_dt pdt 
LEFT JOIN prefix_ue pue ON pue.users_id = pdt.user_id 
LEFT JOIN (
  SELECT 
    pdi.id, 
    pdi.version as version, 
    pdr.title as release_title, 
    pdp.title as download 
  FROM 
    prefix_di pdi 
    LEFT JOIN prefix_dr pdr ON pdr.id = pdi.release_id 
    LEFT JOIN prefix_dp pdp ON pdp.download_id = pdi.download_id 
  WHERE 
    pdp.language_id = 1
  ) as pdi ON pdt.download_item_id = pdi.id 
WHERE 
  1 = 1 
GROUP BY 
  pdt.id 
ORDER BY 
  id asc 
LIMIT 
  0 , 10

我在prefix_dt表中有 300 万条记录,因此查询大约需要 20 秒才能运行。我也尝试过子查询,但没有任何运气。我仅限于使用相同的数据库结构。任何人都知道在单个查询中获取数据而不需要 20 多秒的更好方法吗?

这是带有示例数据的 DB Fiddle: https ://www.db-fiddle.com/f/eEGX8Z2gxrEzhptZsDF9hR/1

标签: mysqlnestedleft-join

解决方案


推荐阅读