gpt4 book ai didi

mysql - 无法深入访问字段多个子查询

转载 作者:行者123 更新时间:2023-11-29 00:01:16 25 4
gpt4 key购买 nike

我在尝试访问子查询的子查询中的选定字段时遇到错误。它说“where 子句中的未知列”。我还有其他子查询也使用相同的字段,它们工作得很好。问题似乎只在我尝试访问子查询中的子查询中的字段时出现。

我的查询的简化版本

SELECT r.id, 
(SELECT min(begindatum)
FROM ((SELECT begindatum FROM reservatiekamer
WHERE reservatieId = r.id) UNION
(SELECT begindatum FROM reservatiefaciliteit
WHERE reservatieId = r.id)) as bg)
as begindatum
FROM reservatie r

错误

#1054 - Unknown column 'r.id' in 'where clause'

背景故事,我正在尝试选择存在多个房间和设施预订(2 个不同的表)的预订的开始日期。

最佳答案

如果子查询总是只返回一个值,您可以使用least():

SELECT r.id, 
least((SELECT begindatum FROM reservatiekamer WHERE reservatieId = r.id),
(SELECT begindatum FROM reservatiefaciliteit WHERE reservatieId = r.id)
) as begindatum
FROM reservatie r;

实际上,这种变体会更好:

SELECT r.id, 
least(COALESCE((SELECT MIN(begindatum) FROM reservatiekamer WHERE reservatieId = r.id), 0),
COALESCE((SELECT MIN(begindatum) FROM reservatiefaciliteit WHERE reservatieId = r.id), 0)
) as begindatum
FROM reservatie r;

这假设值始终为正,这就是 0 存在的原因。另一个值可能更合适。

最后,您可以将逻辑移至 from 子句:

SELECT r.id,
LEAST(COALESCE(rk.minbd, rf.minbd), COALESCE(rf.minbd, rk.minbd)) as begindatum
FROM reservatie r LEFT JOIN
(SELECT reservatieId, MIN(begindatum) as minbd
FROM reservatiekamer
GROUP BY reservatieId
) rk
ON r.id = rk.reservatieId LEFT JOIN
(SELECT reservatieId, MIN(begindatum) as minbd
FROM reservatiefaciliteit
GROUP BY reservatieId
) rf
ON r.id = rf.reservatieId;

coalesce()least(),如果另一个为 NULL,则返回一个值。

关于mysql - 无法深入访问字段多个子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29699499/

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