gpt4 book ai didi

mysql - 子查询中的 union all 仅返回 1ste 值 - 我认为

转载 作者:行者123 更新时间:2023-11-29 19:06:37 26 4
gpt4 key购买 nike

当在下面单独运行时,我会根据正确的结构返回 3 条或任何记录(这 2 个查询返回父 ID 以及该父项的所有子项 - 到目前为止一切顺利):

SELECT @channelid:=channelid AS channelid FROM channel WHERE channelid=7
UNION ALL
SELECT @channelid:=channelid AS channelid FROM channel
JOIN (SELECT @channelid:=7) tmp WHERE channelid_parent=@channelid

不,我想要这些 channel 的广告 - 但是将其用作子查询仅返回 1 条记录(看起来)

SELECT marketadheading FROM marketad WHERE channelid IN (
SELECT @channelid:=channelid AS channelid FROM channel WHERE channelid=7
UNION ALL
SELECT @channelid:=channelid AS channelid FROM channel
JOIN (SELECT @channelid:=7) tmp WHERE channelid_parent=@channelid )

我是傻了还是怎么的?

更新:

SELECT @channelid:=channelid AS channelid FROM channel 
JOIN (SELECT @channelid:=7) tmp WHERE channelid_parent=@channelid

返回 1 条记录,值为 11 - 并且有一个 channel ID 为 11 的添加

但是正在运行

SELECT marketadheading FROM marketad WHERE channelid IN (
SELECT @channelid:=channelid AS channelid FROM channel
JOIN (SELECT @channelid:=7) tmp WHERE channelid_parent=@channelid)

没有返回任何广告,因此 IN 似乎没有使用 SELECTS 值,或者嵌套选择没有返回值

最佳答案

评论太长了。

您正在使用变量来导航层次结构。问题是 MySQL 不保证 SELECT 语句的不同部分中带有变量的表达式的求值顺序。

但是,您的逻辑取决于与 WHERE 一起评估的 SELECT 语句 - 并且(我也应该提到) - 正在评估的 channel 中行的特定顺序.

换句话来说,如果这有效,那么你就是“幸运的”。没有任何保证。

不幸的是,MySQL 中没有简单的修复方法;它根本没有真正支持图形结构(其他数据库提供递归 CTE)。您可以研究 MySQL 中的分层数据模型。有一些方法可以处理此类层次结构。这种类型的查询不是可靠的解决方案。

关于mysql - 子查询中的 union all 仅返回 1ste 值 - 我认为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436739/

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