我很难在没有错误的情况下处理此查询。你能让我走上正轨吗?我花了大约一个小时的变化。
正如您所看到的,我正在努力获得等于casetype_txt
的{{1}}字段的总记录数,然后在'DONATION'
表中获取所有B
这不是空值。因此,我想要实现一个总计数。
Groups
答案 0 :(得分:2)
您的语法不正确,请尝试一下,
SELECT COUNT(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 AND
b.group != ''
WHERE a.casetype_txt = 'DONATION'
要进一步了解联接,请访问以下链接:
答案 1 :(得分:1)
让我们一次一个。
首先,表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
表(WHERE
外连接右侧的表)的条件,这使得外连接工作作为内部联接。因此,上述查询相当于:
-- 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'
) ;