次のSQLクエリがあります
SELECT
DISTINCT
count("SiteTree_Live"."ID")
FROM
"SiteTree_Live"
LEFT JOIN "Page_Live" ON "Page_Live"."ID" = "SiteTree_Live"."ID"
LEFT JOIN "TourPage_Live" ON "TourPage_Live"."ID" = "SiteTree_Live"."ID"
LEFT JOIN "DepartureDate" ON "DepartureDate"."TourID" = "SiteTree_Live"."ID"
WHERE
("SiteTree_Live"."Locale" = 'en_AU')
AND ("SiteTree_Live"."ClassName" IN ('TourPage'))
AND ("DepartureDate"."DepartureDate" LIKE '2012-11%')
しかし、クエリ結果として間違ったカウントを生成します。このクエリが返すと想定される意図した結果の合計は 245 を超えてはなりませんが、現在、約 "4569" を超える結果が返されています。
これは、「DepartureDate」テーブルから結合を削除すると、クエリが期待される結果を返すため、「DepartureDate」テーブルの JOIN が原因です。
"SiteTree_Live"."ID" と "DepartureDate"."TourID" の間の Macthes をカウントし、出発日を除いて "SiteTree_Live"."ID" カウントのみをカウントするには、クエリにどのような変更を加える必要がありますか?
どんな提案も歓迎します:)
答え
SELECT
COUNT(DISTINCT SiteTree_Live.ID)
FROM
"SiteTree_Live" LEFT JOIN "Page_Live" ON "Page_Live"."ID" = "SiteTree_Live"."ID"
LEFT JOIN "TourPage_Live" ON "TourPage_Live"."ID" = "SiteTree_Live"."ID"
LEFT JOIN "DepartureDate" ON "DepartureDate"."TourID" = "SiteTree_Live"."ID"
WHERE
("SiteTree_Live"."Locale" = 'en_AU')
AND ("SiteTree_Live"."ClassName" IN ('TourPage'))
AND ("DepartureDate"."DepartureDate" LIKE '2013-03%')
正しい結果が得られるようです。ヒントをありがとう@Michael Berkowski