0

我很难让这个查询在没有错误的情况下处理。你能让我走上正轨吗?我已经摆弄了大约一个小时的变化。

如您所见,我正在尝试获取casetype_txt等于 的字段的总记录数'DONATION',然后在B表上获取所有Groups非空值。所以,一个总数是我想要达到的。

SELECT
  COUNT(casetype_txt)

FROM
  amd_full_merged_st_load_case AS a

WHERE
  a.casetype_txt = 'DONATION'

LEFT JOIN amd_full_merged_st_load_case AS b
  ON a.case_id=b.case_id

WHERE b.group != '';
4

2 回答 2

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'  

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-04-13T17:54:12.543 回答
1

让这个,一次一个。

首先,JOIN要在FROM子句中制作表格。WHERE子句紧随其后。所以,一个有效的查询应该是(注意我们不能WHERE在一个简单的查询中包含 2 个子句,所以这两个条件必须与一个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右侧的表)的条件,这使得外连接作为内连接工作。所以,上面的查询相当于:LEFTWHERE

-- 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、nn),查询可能会给出错误的计数,因为连接可能会为特定的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'        
      ) ;
于 2013-04-13T20:47:03.510 回答