【发布时间】:2012-05-03 06:53:46
【问题描述】:
这是我的工作查询:
SELECT
d.*, g.name game,
(SELECT GROUP_CONCAT(p.name) FROM shows_players p
LEFT JOIN (SELECT * FROM shows_map) sm ON sm.player_id = p.id
WHERE sm.show_id = d.id AND sm.game_id = g.id) players
FROM shows_dates d
LEFT JOIN (SELECT * FROM shows_map
WHERE player_id = 5 GROUP BY show_id, game_id) m ON d.id = m.show_id
LEFT JOIN shows_games g ON g.id = m.game_id
在添加“WHERE player_id =”行之前,这是一个很好的查询。然后它返回一些没有数据的行。我该如何清理并摆脱这些?
谢谢
【问题讨论】:
-
这真是一团糟……我不太确定这里发生了什么,但是子查询等的连接可能会使查询变得非常慢。您最好问一个不同的问题:从您的目标和数据结构开始,如何进行查询以获取您的数据?
-
我怀疑您的问题是由于 LEFT JOIN 与子查询并过滤子查询。如果可能,请避免使用 LEFT JOIN;否则,请考虑在主查询而不是子查询的(当前不存在的)WHERE 子句中进行过滤。
-
@JonathanLeffler 我相信无论何时在 m 表内部或外部使用 WHERE 都会出现性能问题。据我所知,最好在自定义表中进行过滤,而在 d-table 等普通表之外进行过滤。
-
南妮,你可能是对的。这是我今天能得到的最好的。
标签: mysql group-by group-concat