MySQL Unknown column on 子句

标签 mysql sql

第一个查询有效:

SELECT video.seller from video;

第二个不是:

SELECT SQL_CALC_FOUND_ROWS *,
       t.name as tname
FROM video, type as t 
INNER JOIN user 
ON video.seller = user.id 
WHERE video.type2 = t.id 
AND thumbnail_blobKey != '' 
AND disabled = 0 
AND is_reel = 0 
AND price!= 0 
AND video.type != 4  
GROUP BY video.id 
ORDER BY video.id DESC LIMIT 0, 10

Error : Unknown column 'video.seller' in 'on clause'

最佳答案

这是一个有趣的例子。更好的格式:

SELECT SQL_CALC_FOUND_ROWS *, t.name as tname
FROM video, type as t INNER JOIN
     user
     ON video.seller = user.id
WHERE video.type2 = t.id AND
     thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4 
GROUP BY video.id
ORDER BY video.id DESC
LIMIT 0, 10

问题是 video 的列在 from 子句的其余部分中不被理解,因为 ,。这就是逗号的作用。有趣的是,它可以通过将 , 替换为逻辑上的等效 cross join 来修复:

SELECT SQL_CALC_FOUND_ROWS *, t.name as tname
FROM video cross join type as t INNER JOIN
     user
     ON video.seller = user.id
WHERE video.type2 = t.id AND
     thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4 
GROUP BY video.id
ORDER BY video.id DESC
LIMIT 0, 10

这在 documentation 中有解释原因是优先。逗号的优先级低于 cross join。因此,您的表达式中的连接被评估为“视频连接(类型连接用户)”。因为第二个连接首先被解释,所以 video 中的列是未知的。

但是表上确实有join,所以写成这样比较好:

SELECT SQL_CALC_FOUND_ROWS *, t.name as tname
FROM video join
     type t
     on video.type2 = t.id INNER JOIN
     user
     ON video.seller = user.id
WHERE thumbnail_blobKey != '' AND disabled = 0 AND is_reel = 0 AND price!= 0 AND video.type != 4 
GROUP BY video.id
ORDER BY video.id DESC
LIMIT 0, 10

关于MySQL Unknown column on 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203393/

相关文章:

从 phpmyadmin 丢失数据库后 php artisan 迁移错误

mysql - 通过 SQL 枚举组合

sql - Oracle 查询显示错误 "not a GROUP BY expression"

SQL 使用嵌套的 INSERT INTO?

php - cakephp - 正确连接

mysql - 添加两个别名的两个结果

php - 在 laravel Controller 中处理从 mysql 存储过程接收的数组

sql - 向 SQL 查询的列中的结果添加单引号

sql - 选择查询固定长度

PHP/SQL 变量操作