我在 SELECT 中声明了变量upload_source
但得到错误
where"子句中的未知列"upload_source">
SELECT b.name as name, filename, upload_date, IF(filename LIKE '%.png%', 1, 0) as type, IF(ex_link!='', 0, 1) as upload_source, title, a.id
FROM (`all_media` a)
LEFT JOIN `admins` b ON `b`.`id`=`user_id`
WHERE `a`.`approved` = 0
AND `upload_source` = 0
ORDER BY `filename` DESC
如何解决?
不能在 where 子句中使用别名表达式/列。在Where
子句中使用相同的表达式(在Select
子句中定义(。
来自 MySQL 文档:
可以在查询选择列表中使用别名为列提供 不同名称。您可以在"分组依据"、"排序依据"或"具有"中使用别名 子句来引用列。
标准 SQL 不允许在 WHERE 子句中引用列别名。 施加此限制是因为当 WHERE 子句 评估后,列值可能尚未确定。
改为执行以下操作(我已经即兴upload_source = 0
ex_link != ''
(:
SELECT b.name as name,
filename,
upload_date,
IF(filename LIKE '%.png%', 1, 0) as type,
IF(ex_link!='', 0, 1) as upload_source,
title,
a.id
FROM `all_media` AS a
LEFT JOIN `admins` b ON `b`.`id`=`user_id`
WHERE `a`.`approved` = 0
AND ex_link != ''
ORDER BY `filename` DESC
在 SQL 中,WHERE关键字不能与聚合函数一起使用。 尝试使用有子句:
SELECT b.name as name, filename, upload_date,
IF(filename LIKE '%.png%', 1, 0) as type, IF(ex_link!='', 0, 1) as upload_source,title, a.id
FROM (
all_mediaa)
LEFT JOIN
管理员b ON
b.
ID=
user_id
WHERE
.
批准的= 0
HAVING
upload_source= 0
ORDER BY
文件名DESC