讓我們一次一個。
首先,表JOIN
將在FROM
條款中進行。在此之後的條款是WHERE
。所以,一個有效的查詢將會是(注意,我們不能在簡單的查詢中具有2個WHERE
子句,所以這兩個條件必須與AND
-或有時與OR
結合,但在這裏可能不是這種情況):
-- Version 1 --
SELECT
COUNT(a.casetype_txt)
FROM
amd_full_merged_st_load_case AS a
LEFT JOIN amd_full_merged_st_load_case AS b
ON a.case_id=b.case_id
WHERE
a.casetype_txt = 'DONATION'
AND b.group <> '' ;
現在,因爲子句中有關於b
表(LEFT
外連接右側的表)的條件,所以這會使外連接作爲內連接工作。 SO,上面的查詢相當於:
-- Version 2 --
SELECT
COUNT(a.casetype_txt)
FROM
amd_full_merged_st_load_case AS a
INNER JOIN amd_full_merged_st_load_case AS b
ON a.case_id=b.case_id
WHERE
a.casetype_txt = 'DONATION'
AND b.group <> '' ;
以上(版本2)很可能是你以後的。還有一個問題。根據兩個表(1-1,1-n,n-1,n-n)之間的關係,查詢可能會給出錯誤的計數,因爲連接可能會爲特定的case_id
產生許多行。所以,你也應該檢查,如果轉換到加入半連接(使用子查詢EXISTS
)爲您提供您所尋求的答案:
-- Version 3a --
SELECT
COUNT(a.*) -- we want to count rows
FROM
amd_full_merged_st_load_case AS a -- from table a
WHERE -- where
a.casetype_txt = 'DONATION' -- casetype is DONATION
-- and
AND EXISTS -- at least one
(SELECT * -- (related row) exists
FROM amd_full_merged_st_load_case AS b -- in table b
WHERE a.case_id = b.case_id
AND b.group <> ''
) ;
或:
-- Version 3b --
SELECT
COUNT(b.*) -- we want to count rows
FROM
amd_full_merged_st_load_case AS b -- from table b
WHERE -- where
b.group <> '' -- group is not empty
-- and
AND EXISTS -- at least one
(SELECT * -- (related row) exists
FROM amd_full_merged_st_load_case AS a -- in table a
WHERE a.case_id = b.case_id
AND a.casetype_txt = 'DONATION'
) ;