问题时的teradata案例

时间:2015-03-27 16:44:51

标签: sql teradata

我有以下查询,它们应该给出相同的结果,但却截然不同 1。

         select count(*)
         from qigq_sess_parse_2
         where str_vendor = 'natural search' and str_category is null and destntn_url = 'http://XXXX.com';
  1.      create table qigq_test1 as
         (
           select case
                when (str_vendor = 'natural search' and str_category is null and destntn_url = 'http://XXXX.com' ) then 1
                else 0 
            end as m
            from qigq_sess_parse_2
          ) with data;  
    
         select count(*)  from qigq_test1 where m = 1;      
    
  2. 第一个块给出总计数132868,而第二个块仅给出1.

    查询中导致这种差异的细微部分是什么?

    由于

2 个答案:

答案 0 :(得分:2)

在Teradata中创建表格时,您可以将其指定为SETMULTISET。如果您未指定,则默认为SET。集表不能包含重复项。所以最多,你的新表将包含两行,0和1,因为这可以来自你的case语句。

编辑: 经过一番挖掘后,默认设置并不那么简单。但无论如何,我怀疑如果你将MULTISET选项添加到你的create语句中,你会看到你期望的行为。

答案 1 :(得分:0)

我的猜测是你的Create Table语句只会提取符合以下Count语句参数的一行数据。试试这个:

CREATE TABLE qigq_test1 (m integer);
INSERT INTO qigq_test1
SELECT
    CASE
        WHEN (str_vendor = 'natural search' and str_category IS NULL AND destntn_url = 'http://XXXX.com' ) THEN 1
        ELSE 0 
    END AS m
FROM qigq_sess_parse_2;
SELECT COUNT(*) FROM qigq_test1 WHERE m = 1;

这应该将qigq_sess_parse_2中的 ALL ROWS 数据拉入qigq_test1作为0或1。