2010-12-12 2 views
1
mysql> select COUNT(*), * from help_keyword; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from help_keyword' at line 1 

이 사람은하지 않습니다 :동일한 select 절에서 count (*) 및 *를 사용하면 오류가 발생합니다. 왜?

mysql> select COUNT(*), help_keyword.* from help_keyword; 
+----------+-----------------+------+ 
| COUNT(*) | help_keyword_id | name | 
+----------+-----------------+------+ 
|  452 |    0 | JOIN | 
+----------+-----------------+------+ 
1 row in set (0.00 sec) 

이 왜입니까?

+1

검색어가 어떤 식 으로든 의미있는 결과를 내지는 않습니다. 너는 무엇을 기대 하느냐? 그룹화하고 계산하려고 했겠지? – knittl

+0

'선택 목록에있는 다른 항목과 함께 수식어가 아닌 *를 사용하면 구문 분석 오류가 발생할 수 있습니다. 이 문제를 피하려면 정규화 된 tbl_name. * reference를 사용하십시오. - http://dev.mysql.com/doc/refman/5.0/en/select.html – ajreal

+0

@knittl : 정상적인 동작 이외의 다른 것을 기대했습니다 (잊어 버렸습니다. 그것은 무엇 이었는가) : 표 + 그것에있는 조사를 가진 여분 열. 이상하게 들리지만 원래 코드는 제 것이 아닙니다.이 포럼에서 도움을 얻으려는 사람으로부터 온 것입니다 : http://www.siteduzero.com/forum-83-588952-p1-requetes-mises-a -jour-cron-ne-fonctionnent-pas.html – greg0ire

답변

5

Count(*)을 사용하면 데이터베이스에 집계 쿼리가 필요하므로 집계 함수 (count, min, max 등)를 포함하지 않는 select의 모든 열이나 식을 사용하여 그러한 집합이 수행되는 "버킷". 이러한 표현식이 있으면 일반적으로 이러한 열/표현식을 명시 적으로 나열하기 위해 Group By 절도 포함해야합니다. 테이블의 모든 열을 포함함으로써 (어떤 것이 * 수행하는지), 테이블의 모든 행에 걸쳐 집계를하는 ​​것이 합당하지 않습니다. (어떤 적절한 관계형 tbale에서는 항상 그 행에 대한 모든 값과 일치하는 행이 하나만있을 것입니다.)

4

왜 구문 오류가 발생할지 모르지만 그다지 관련성이 없습니다. 아마도 그들은 count(*)*을 쿼리에 사용하는 것이 허용되어서는 안되는 잘못된 정의라고 느꼈을 것입니다.

이와 같은 쿼리는 예측 가능한 결과를 제공하지 않으므로 어쨌든 사용해야하지 않습니다. 임의의 레코드가 선택되어 help_keyword.* 파트의 값을 생성하며 어떤 레코드를 제어 할 수 없습니다.

count 집합의 사용은 쿼리가 그룹화되었음을 의미하지만 group by 절이 없으므로 단일 그룹이됩니다. 일부 다른 데이터베이스 시스템 (예 : Microsoft SQL Server)에서는 group by 절에 지정되지 않은 필드를 결과에 포함 할 수 없습니다. MySQL은 무엇인가의 이유로 이것을 허용하지 않습니다. 아마 그것이 의미가있는 것을 돌려 줄지 결정하는 것은 당신에게 달려 있습니다.

필드에서 값을 반환하려면 해당 필드의 값을 그룹화해야 해당 값이 해당 그룹의 모든 레코드에서 동일하다는 것을 알 수 있습니다. 예 :

이렇게하면 각 이름에 대한 그룹이 만들어지고 각 그룹에 이름과 개수가 반환됩니다.

관련 문제