以下のクエリは、エラーが発生したクエリの簡略化されたバージョンです。この小さなクエリでは、前に左の結合を効果的に無効にしていたwhere節がありました。SQL - 複雑なクエリLEFT JOIN with WHERE
SELECT FC_Name, COUNT(F.Findings_ID) AS 'No_of_Findings'
FROM FindingCategories AS FC
LEFT OUTER JOIN Findingsubcategories AS FSC ON FSC.FC_ID = FC.FC_ID
LEFT OUTER JOIN Findings AS F ON F.FSC_ID = FSC.FSC_ID AND F.AU_ID = @Audit_ID
LEFT OUTER JOIN Audit AS A ON A.Audit_ID = F.AU_ID
GROUP BY FC_Name
は今 - 残念ながら、私がしようとしているもののために、このクエリを使用するカント、達成: 私は、現在の選択のための私のデータベースで詳細を取得する必要があり、前年からの値。以下に示す:
SELECT A.Audit_ID, c.FC_Name, COUNT(c.FC_Name) AS 'No_of_Findings'
FROM Audit AS A
LEFT OUTER JOIN Findings F on A.Audit_ID = f.AU_ID
LEFT OUTER JOIN FindingCategories C on C.FC_ID = F.Findings_category_ID
LEFT OUTER JOIN GovernmentAgencies GA on GA.GA_ID = A.GA_ID
LEFT OUTER JOIN AuditType AT on AT.AuditType_ID = a.AuditType_ID
WHERE A.Audit_Year= @Year AND (@Agency IS NULL OR ga.GA_LegalName = @Agency)
AND (@AuditType is null or @AuditType = AT.AuditType_Category)
AND (@Audit_ID is null or @Audit_ID = a.Audit_ID)
GROUP BY A.Audit_Year, c.FC_Name, A.Audit_ID
SELECT a.Audit_ID, c.FC_Name, COUNT(c.FC_Name) AS 'No_of_Findings'
FROM Audit AS A
LEFT OUTER JOIN Findings F on a.Audit_ID = f.AU_ID
LEFT OUTER JOIN FindingCategories C on C.FC_ID = F.Findings_category_ID
LEFT OUTER JOIN GovernmentAgencies GA on GA.GA_ID = a.GA_ID
LEFT OUTER JOIN AuditType AT on AT.AuditType_ID = a.AuditType_ID
WHERE a.Audit_Year= '@Year-1 AND (@Agency IS NULL OR ga.GA_LegalName = @Agency)
AND (@AuditType is null or @AuditType = AT.AuditType_Category)
GROUP BY a.Audit_Year, c.FC_Name, a.Audit_ID
は再び、私の最初のクエリごとに私が参加し、私の私の左を回すインナーに参加実現、私は無駄にこれを解決するには、いくつかの異なる方法を試してみました。問題を解決するためにこれをどのように変更するのですか?
サンプルデータ: 表1 /表2
ようにどうあるべきか。表1 - 単純なクエリを使用して:
、すべての 'LEFT OUTER JOIN'sであなたの' SELECT'クエリはデータを返しますが、あなたはそれに 'WHERE'句を追加するとき、それはしないのですか?場合それは質問ですか?それはAudit_Yearの句が常にfalseを返すのでしょうか? – Ash
@Ashwin Nairいいえ、本質的に - where節は私の左の結合を内側の結合に変え、それでC言語でグラフを作成する必要があるnullを取り除きます。 – Krono
そうです。私たちはあなたのデータを見ることができないので、ここであなたのデータを無効にしている句を見つける必要があります: 'WHERE A.Audit_Year = @Year AND(@Agency IS NULL OR ga.GA_LegalName = @Agency) AND @AuditTypeがnullまたは@AuditType = AT.AuditType_Category) AND(@Audit_IDがnullまたは@Audit_ID = a.Audit_ID) ' – Ash