2016-09-14 7 views
0

내가 가진이 데이터- ONLY_FULL_GROUP_BY

1 => blue, 
2 => red, 
3 => red 

내가 원하는 건은 다음과 같습니다

[1, 2] 

MySQL을 엄격 모드 비활성화, 또는 더 구체적으로, ONLY_FULL_GROUP_BY 장애인으로 - 내가 할 수있는

SELECT id ... GROUP BY color 

을하지만 활성화와 나는 그렇게 할 수

을하고
SELECT color, id ... GROUP BY color, id 

내가 및/또는 ONLY_FULL_GROUP_BY 아니면 그냥 사람들을 해제해야합니다

엄격 모드를 사용 불가능하게하는 것 이외의 다른 어떤 도움 시작 것과 동일한 결과를 생성합니다. 그것은 좋은 것보다 더 해를 끼치는 것 같습니다.

+0

같은 필터를 사용한다 얻기를위한 _ _ "그것은 좋은보다는 해 야기 된 것으로 판단"- 반대로, 그것은 당신이 1 얻기에서 방지를, 3] 결과적으로, 당신은 원하지 않지만, 그렇지 않으면 얻을 가능성이 높습니다. (두 개의 행 사이에는 색상이 빨간색으로 표시되므로 차이는 단지 상상력입니다.) – CBroe

답변

1

문제는 color으로 그룹화하고 있지만 다 대일 관계가있는 경우 id으로 무엇을하고 싶은지 지정하지 않는 것이 문제입니다.

SELECT MIN(id) as id ... GROUP BY color 

이 줄은 이제 말한다 "색상으로 그룹 및 각 작은 id을 선택합니다."가 "빨간색"두 기록을 발견하고 어떻게 결합하는지 전혀 몰랐다 이전 반면 :

이 시도 그들.

0

당신이

SET sql_mode = 'ONLY_FULL_GROUP_BY'; 

다음 당신은 당신이 COL1, COL2을 선택하는 경우, 이렇게하여이 그룹의 집계에 사용하는 모든 열을 표시하려면 당신은 COL1, COL2를 설정해야합니다 COL3 것을 의미 사용하는 경우, 당신이 필요하지 않은 경우 ..에 의해 그룹의 COL3은 'ONLY_FULL_GROUP_BY'발생하지이 있지만 aggreegation에서 선택한 행은 impredictable 있습니다 .. 당신이 수 또는 같은 aggreagtion 기능을 사용하지 않는 사용자의 경우 샘플 http://dev.mysql.com/doc/refman/5.6/en/counting-rows.html

이 자습서를 참조 분 또는 최대 그래서 그룹별로 필요가없는 것 같습니다.

에만 행 1과 2는 단순히

select color, id from my_table where id<> 3;