gpt4 book ai didi

MySQL - 三重嵌套选择的 where 子句

转载 作者:行者123 更新时间:2023-11-29 10:20:49 25 4
gpt4 key购买 nike

我正在编写我个人做过的最复杂的查询......但我被卡住了!

代码如下:

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 专家来解释我的问题。出错了。

我有一种感觉,我需要在某个地方添加另一个连接,但我不知道在哪里。我试图寻找答案,但我不太确定要使用什么搜索词 - 所以我没有走得太远。

任何帮助将不胜感激!

这是这个问题的一个 fiddle :http://sqlfiddle.com/#!9/c77a98/2

最佳答案

您发布的查询非常复杂,如果您使用一些JOIN,则可以使可读性显着提高。

我已经设法重写(未经测试)您的大部分查询,如下所示,但我不确定是否要重构 booked 部分,因为不清楚您想要在没有可供引用的可靠架构和示例数据。

如果您愿意使用您的架构和数据创建一个有效的 SQL fiddle ,我将尽力完成它。如果没有,希望以下内容可以帮助您简化并解决您的问题。

SELECT 
el.UID,
el.event_confirmed,
el.event_title,
GROUP_CONCAT(DISTINCT g.genre SEPARATOR ', ') AS genreNames,
GROUP_CONCAT(DISTINCT g.colour SEPARATOR ', ') AS genreCodes,
SUM(ts.booked) AS booked
FROM eventsList el
INNER JOIN eventsDetails ed ON (el.UID = ed.event_masterEvent AND ed.event_eventDateAndTime >= CURDATE())
LEFT JOIN eventsGenre eg ON (el.UID = eg.EUID)
LEFT JOIN genres g ON (eg.GUID = g.UID)
LEFT JOIN (
SELECT ts.*, MAX(ts.dateStored)
FROM eventsDetails ed
INNER JOIN ticketSales ts ON ts.DUID = ed.UID
GROUP BY ts.DUID
) AS ts ON (ed.UID = ts.DUID)
WHERE el.event_active = 1
AND el.UID = 1147
GROUP BY el.UID
ORDER BY ed.event_eventDateAndTime ASC;

关于MySQL - 三重嵌套选择的 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com