【发布时间】:2020-03-27 20:32:08
【问题描述】:
为什么这个查询在 MySql 8 中崩溃但在 Mysql 5 中运行良好?
SELECT *
FROM `sports`
WHERE EXISTS (SELECT *,
(SELECT `id`
FROM `sport_events`
WHERE `tournament_id` = `tournaments`.`id`
AND `status` = ?
AND `sport_events`.`deleted_at` IS NULL
ORDER BY `created_at` DESC
LIMIT 1) AS `live_event_id`
FROM `tournaments`
WHERE `sports`.`id` = `tournaments`.`sport_id`)
导致崩溃的查询部分就是这个嵌套的子选择
(SELECT `id`
FROM `sport_events`
WHERE `tournament_id` = `tournaments`.`id`
AND `status` = ?
AND `sport_events`.`deleted_at` IS NULL
ORDER BY `created_at` DESC
LIMIT 1) AS `live_event_id`
【问题讨论】:
-
你能告诉我们你的表架构吗
-
在准备或执行/打开/获取时是否崩溃?
-
顺便说一句,EXISTS 可以简化为
WHERE EXISTS (SELECT * FROM tournaments WHERE sports.id = tournaments.sport_id)。
标签: mysql sql subquery mysql-8.0