特に複数の結合を持つSQL文の場合、SQL文のHAVINGコンポーネントがどのように機能するかを明確にしたいと考えました。私はレコードがWHERE要件のすべてを持っているtbl_person、から、レコードを引き出すしたいACCESS SQLでHAVINGを使用することについての質問
SELECT
p.id,
p.first_name as [First Name],
p.last_name as [Last Name]
FROM
([tbl_person] as p
INNER JOIN [tbl_person_languages] as pl
ON [p].[id] = [pl].[person_id])
INNER JOIN [tbl_person_crossCuttingSkills] As ccp
ON [p].[id] = [ccp].[person_id]
WHERE
cint(pl.language_id) in (12,14) AND
cint(ccp.skill_id) in (55)
GROUP BY
p.id,
p.first_name,
p.last_name
HAVING
count(pl.language_id) =2 AND
count(ccp.skill_id) = 1
:以下のSQL SELECT文を考えてみましょう。たとえば、私はイタリア語(ID 12)とスペイン語(ID 15)を話し、料理のスキル(55)を持つすべてのユーザーを選択したいと考えています。彼らは、1つ以上の要件だけでなく、すべての要件を満たす必要があります。私はこれがGROUP BYとHAVINGを使う場所であると仮定していました。持つ:言語に2つの選択肢があるので
count(pl.language_id) =2
私は、カウント= 2を使用してWHERE句(12及び14)
そして、もう一つの価値があるので、私は
count(ccp.skill_id) = 1
を使用WHERE句(55)に記述します。
これを行う正しい方法ですか?何らかの理由で、これはレコードを返しません(これらの要件に厳密に合致する人物の私のDBに1つのレコードがあります)。しかし、私がHAVINGを変更した場合:
count(pl.language_id) =2 AND
count(ccp.skill_id) = 2
これは問題なく動作します。どうしてこれなの?どのようにこれが正しく動作しないのか、何か他のことが起こっているという私の前提ですか?
同じID、ファーストネーム、ラストネームを持つ人は、2つの言語と1つのスキルを持つ人はいません。あなたが言及したように、2つの言語と2つのスキルのインスタンスがあるかもしれません。 where句を指定すると、いくつの言語/スキルが表示されますか?少量のデータを提供することは可能ですか? – Reisclef