繁体   English   中英

选择语句中的子查询返回SQL错误

[英]Subquery in select statement returning SQL error

我收到此查询的SQL错误

错误号:1064
您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册以获取在'*附近使用的正确语法
来自`cast_gallery` q
在q.all_media_id = r.id上加入`all_media` r
第1行的q.pa'

SELECT `cast_name`, `cast_slug`, (SELECT count(q.*)
 FROM `cast_gallery` q
 JOIN `all_media` r on q.all_media_id=r.id
 WHERE q.parent = `casts`.`id` AND r.approved=1) as image_gallery, `active`, `view`, `checked`, `sex`, `id`
FROM (`casts`)
ORDER BY `cast_name` asc
LIMIT 10

怎么解决?

要计算总行数,我们使用COUNT(*) ,而不是Count(q.*) 另外,在From子句中不需要在casts周围加上括号。

SELECT `cast_name`, 
       `cast_slug`, 
       (SELECT count(*)
        FROM `cast_gallery` q
        JOIN `all_media` r on q.all_media_id=r.id
        WHERE q.parent = `casts`.`id` AND 
              r.approved=1) as image_gallery, 
      `active`, 
      `view`, 
      `checked`, 
      `sex`, 
      `id`
FROM `casts`
ORDER BY `cast_name` asc
LIMIT 10

附加信息:

COUNT(...)用于计算非NULL值的数量; 但是COUNT(*)将计算检索到的总行数,无论它们是否包含NULL值。

尝试仅将count(q.*)更改为count(*)

计数语法不正确。 如果要在子查询中查找行数,可以使用count(*)。 有关更多说明,请参阅http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/sql/sql_func_count.asp.html

SELECT `cast_name`, `cast_slug`, (SELECT count(*)
FROM `cast_gallery` q
JOIN `all_media` r on q.all_media_id=r.id
WHERE q.parent = `casts`.`id` AND r.approved=1) as image_gallery, `active`, 
`view`, `checked`, `sex`, `id`
FROM (`casts`)
ORDER BY `cast_name` asc
LIMIT 10

应该管用

您可以尝试使用q.all_media_id代替count(q。*)

SELECT `cast_name`, `cast_slug`, (SELECT count(q.all_media_id)
 FROM `cast_gallery` q
 JOIN `all_media` r on q.all_media_id=r.id
 WHERE q.parent = `casts`.`id` AND r.approved=1) as image_gallery, `active`, `view`, `checked`, `sex`, `id`
FROM (`casts`)
ORDER BY `cast_name` asc
LIMIT 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM