Ben*_*Ben 4 mysql sql database column-alias
我对我创建的一个查询有一个奇怪的'问题'.鉴于下一个查询:
SELECT
ID,
DistanceFromUtrecht,
(
SELECT
(MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24))
FROM
PricePeriod
WHERE
PricePeriod.FK_Accommodation = Accommodation.ID
) AS LatestBookableTimestamp
FROM
Accommodation
WHERE
LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)
phpMyAdmin不断抛出一个关于没有名为'LatestBookableTimestamp'的列的错误,即使我有一个由子查询检索的列,该别名.我也尝试过用tableprefix选择每一列.这不起作用.最后,我通过table-alias选择了所有列,并为表提供了别名.一切都没有运气.
有人能告诉我我做错了什么吗?我甚至搜索了一些资源,看看我是不是错了,但在很多情况下,互联网上的作者使用与我相同的语法.
Mch*_*chl 11
使用HAVING
HAVING
LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)
另一方面,你正在使用一个依赖子查询,这是一个糟糕的主观表现.
试试这样:
SELECT
a.ID,
a.DistanceFromUtrecht,
pp.LatestBookableTimestamp
FROM
Accommodation AS a
INNER JOIN (
SELECT
FK_Accommodation,
MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24) AS LatestBookableTimestamp
FROM
PricePeriod
GROUP BY
FK_Accommodation
) AS pp
ON pp.FK_Accommodation = a.ID
WHERE
pp.LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)
您不能在WHERE子句中使用列别名.
MySQL(和SQL Server)将允许在GROUP BY中使用列别名,但它不受广泛支持.ORDER BY是支持列别名引用的最一致支持的位置.
使用:
SELECT a.id,
a.distancefromutrecht,
b.LatestBookableTimestamp
FROM ACCOMMODATION a
LEFT JOIN (SELECT pp.fk_accommodation,
MAX(DateUntil) - (ReleaseDays * 60 * 60 * 24) AS LatestBookableTimestamp
FROM PRICEPERIOD pp
GROUP BY pp.fk_accommodation) b ON b.fk_accommodation = a.id
WHERE b.LatestBookableTimestamp < UNIX_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)