[SQL] PostgreSQL을에 선택 MySQL의 변환
SQLPostgreSQL을에 선택 MySQL의 변환
내가 MySQL의에서 제대로 작동이 쿼리가 있습니다. 여기에 대한 자세한 배경.
SELECT c.*, SUM(ABS(v.vote)) AS score
FROM categories c,items i, votes v
WHERE c.id = i.category_id
AND i.id = v.voteable_id
AND v.created_at > '#{1.week.ago}'
GROUP BY c.id
ORDER BY score DESC LIMIT 8;
나는 PostgreSQL의에서 실행 시도하고,이 오류 메시지와 함께 실패했습니다.
나는 (항목의 이름이 고유 가정, MySQL은 같은 두 작업을) GROUP BY 절에 "c.name"에 "c.id"를 변경 시도, 그래서 이것이 의미가 있는지 무엇을하지 않았다.
그러나 이것은 단지 다른 유사한 오류 발생
이 문제는 어떻게 해결 될 수 있는가?
해결법
-
==============================
1.당신은 당신이 그룹화되어 SELECT의 목록 열 이름에 있습니다 :
당신은 당신이 그룹화되어 SELECT의 목록 열 이름에 있습니다 :
SELECT c.id, c.name, SUM(ABS(v.vote)) AS score FROM categories c,items i, votes v WHERE c.id = i.category_id AND i.id = v.voteable_id AND v.created_at > '#{1.week.ago}' GROUP BY c.id, c.name ORDER BY score DESC LIMIT 8;
"GROUP BY 절에서 참조되지 않은 SELECT 절에 열 이름을 포함하도록 허용되지 않습니다."
-
==============================
2.난 그냥 MySQL의에서 SQL 서버로가는 그 문제 만이 있었다. 나는이 이상한 수 있다는 사실을 생각했다!
난 그냥 MySQL의에서 SQL 서버로가는 그 문제 만이 있었다. 나는이 이상한 수 있다는 사실을 생각했다!
당신이 GROUP BY 절을 할 때 예, 대부분의 데이터베이스에서, 당신은 단지 GROUP BY 절에 나타나는 열 또는 열 집계를 선택할 수 있습니다. 그것은 다른 열 당신이있는 거 선택이 진정으로 고유하거나하지 않은 경우 알 수있는 방법이 없기 때문입니다.
단지 그들이 참으로 독특한 경우는 GROUP BY에서 원하는 열을 넣어. 이것은 의심했다 MySQL의의 "기능"이었다.
당신은 MySQL을의 행동과 어떻게 여기에 다른에 대해 읽을 수 있습니다.
예:
SELECT c.*, SUM(ABS(v.vote)) AS score FROM categories c,items i, votes v WHERE c.id = i.category_id AND i.id = v.voteable_id AND v.created_at > '#{1.week.ago}' GROUP BY c.id, c.name, c.whatever_else ORDER BY score DESC LIMIT 8;
-
==============================
3.당신이 당신의 문을 변경하는 경우 그것을 작동합니다 :
당신이 당신의 문을 변경하는 경우 그것을 작동합니다 :
SELECT c.id, SUM(ABS(v.vote)) AS score FROM categories c,items i, votes v WHERE c.id = i.category_id AND i.id = v.voteable_id AND v.created_at > '#{1.week.ago}' GROUP BY c.id ORDER BY score DESC LIMIT 8;
나는 확실히 MySQL은 결과로주는 무슨 모르겠지만, 당신이 PostgreSQL의에서 작업을하지 않는 이유의 아주 작은 예를 제공하기 위해, 다음과 같은 범주 테이블을 살펴 :
id | name ---|----- 1 | ABC 1 | DEF
당신은 그룹 ID로, 그래서 결과의 각 행은 하나의 ID를 포함해야합니다. 당신은 또한 이름을 선택하면, 그것에 의해 그룹화하지 않고, 무슨 이름에 대한 결과에 표시해야합니까?
그것은 ABC 또는 DEF가 될 수 있지만 (MySQL은 분명하지 않지만) 데이터베이스 엔진은 정말 당신을 위해 결정할 수 없습니다.
from https://stackoverflow.com/questions/1062158/converting-mysql-select-to-postgresql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL은 여러 선택 문을 결합 (0) | 2020.07.13 |
---|---|
[SQL] SQL : 여러 열을 GROUP BY 및 MAX를 사용하여 (0) | 2020.07.13 |
[SQL] SQLSTATE는 [23000] : 무결성 제약 조건 위반 : 1452 추가 또는 자식 행을 업데이트 할 수 없습니다가 : 외래 키 제약 조건이 실패 (0) | 2020.07.13 |
[SQL] 어떻게 예약 된 SQL을 키워드로 명명 된 테이블 열을 처리하기 위해? (0) | 2020.07.13 |
[SQL] 오류 코드 : 1822 외래 키 constaint를 추가하는 데 실패했습니다. 제약 조건에 대한 인덱스를 누락 (0) | 2020.07.12 |