2016-10-10 12 views
1

私のクエリに大きな問題があります。何らかの理由でWHERE句の1つを取得できません。Postgres SQLクエリでカラムが特定されない

これは私の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

任意のアイデア私がしなければならないものにこのクエリは機能するのですか?どうもありがとうございました。もっと情報が必要な場合は教えてください。

+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などの修飾された列参照は2つの識別子で構成されているため、それぞれ引用符を付ける必要があります。

それ以外の場合は、名前が"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" 'とは違う列名です - すべての時間に二重引用符を使用する必要があります –

関連する問題