2016-10-10 4 views
1

내 쿼리에 큰 문제가 있습니다. 몇 가지 이유로 인해 WHERE 절 중 하나를 사용할 수 없습니다.Postgres SQL 쿼리가 열을 식별하지 않습니다.

SELECT COUNT(*) FROM "diets" JOIN "meals" on "idDiet" = "dietId" 
WHERE kcal != 0 AND "diets.createdAt" > '2016-10-2' 
GROUP BY "userIdUser" HAVING count(*) >= 5; 

그리고 내 오류 : 두 테이블에 대한

ERROR: column "diets.createdAt" does not exist 

내 계획 :

enter image description here enter image description here

내가 무엇을해야에 어떤 생각

내 SQL입니다 이 쿼리를 사용하려면 어떻게해야합니까? 대단히 감사합니다. 자세한 정보가 필요하면 알려주세요.

+0

일반적으로 인용 식별자는 피해야합니다. 그들은 그럴 가치가 있습니다. 큰 따옴표를 사용하지 않으면 괜찮을 것입니다. –

답변

2

당신의 따옴표는 잘못 :

SELECT COUNT(*) 
FROM "diets" JOIN 
    "meals" 
    ON "idDiet" = "dietId" 
WHERE kcal <> 0 AND "diets"."createdAt" > '2016-10-2' 
GROUP BY "userIdUser" 
HAVING count(*) >= 5; 

따옴표는 식별자 주위에 이동합니다. diets.createdAt와 같은 공인 된 열 참조는 두 개의 식별자로 구성되어 있으므로 따옴표가 있어야합니다 (모든 식별자가있는 경우).

그렇지 않으면 이름이 "diets.createdAt" 인 열을 참조하는 것입니다. 즉, 열 이름에 마침표가 있습니다.

+0

놀랍습니다. 정말 고마워요! 나는 이것이 어리석은 실수라는 것을 알고 있지만, 내가 질문했을 때 데이터베이스 데이터베이스의 교수조차도 그것을 발견하지 못했다. 너 자신! – leofontes

0
SELECT COUNT(*) FROM diets a JOIN meals b on a.idDiet = b.dietId 
WHERE a.kcal <> 0 AND a.createdAt > '2016-10-2' 
GROUP BY a.userIdUser HAVING count(*) >= 5; 
+0

열은 큰 따옴표로 만들어 지므로 대소 문자를 구분합니다. 'createdAt'는 다른 컬럼 이름이고''createdAt "'입니다 - leofontes는 항상 큰 따옴표를 사용해야합니다 –

관련 문제