【发布时间】:2018-03-14 22:34:33
【问题描述】:
我正在编写我个人做过的最复杂的查询......我被卡住了!
代码如下:
SELECT
el.UID,
(
SELECT
SUM(booked)
FROM
(
SELECT
ts.*, max(ts.dateStored)
FROM eventsDetails ed
JOIN ticketSales ts ON ts.DUID = ed.UID
WHERE ed.event_masterEvent = 1147
GROUP BY ts.DUID
) a
) as booked,
el.event_confirmed,
el.event_title,
(
SELECT
GROUP_CONCAT(g.colour)
FROM eventsGenre eg
JOIN genres g ON g.UID = eg.GUID
WHERE eg.EUID = el.UID
) AS genreCodes,
(
SELECT
GROUP_CONCAT(g.genre)
FROM eventsGenre eg
JOIN genres g ON g.UID = eg.GUID
WHERE eg.EUID = el.UID
) AS genreNames
FROM eventsList el
JOIN eventsDetails ed ON el.UID = ed.event_masterEvent
WHERE el.event_active='1'
AND ed.event_eventDateAndTime >= CURDATE()
GROUP BY el.UID
ORDER BY ed.event_eventDateAndTime ASC
在“WHERE ed.event_masterEvent = 1147”这一行上,我不想将其更改为“WHERE ed.event_masterEvent = el.UID”。 1147 只是为了测试代码是否有效……但现在我需要引用整个事件 ID。
每当我这样做时,我都会收到一条错误消息,指出该列不存在。
我不明白,因为在查询的后面,我可以在子选择中说“WHERE eg.EUID = el.UID”。
我不知道我做错了什么......正如我之前所说,我现在非常远离我的舒适区,正在寻找一些 MySQL 专家来解释我在哪里出错了。
我感觉我需要在某个地方添加另一个联接,但我不知道在哪里。我试图寻找答案,但我不确定要使用什么搜索词 - 所以我没有走得太远。
任何帮助将不胜感激!
【问题讨论】:
-
我不明白你为什么需要嵌套的
SELECT。未使用的MAX(ts.dateStored)有什么意义? -
如果您试图为每个
DUID获取最后一个ts.dateStored的booked值,那不是正确的方法。见row with max value of a column -
正如我所说 - 我是新手......所以谢谢你的建议。我去看看。但是,是否有原因我无法从嵌套选择中引用 el.UID - 或者有没有办法做到这一点?
-
来自manual:派生表(SELECT 的 FROM 子句中的子查询)不能包含外部引用或对同一 SELECT 的其他表的引用
-
ed.UID和ed.event_masterEvent之间是否有1:1的对应关系?