1 year ago

#384409

test-img

Matheus Santz

DB2 - Select count(*) not working properly on subquery

Here follows 2 querys that should bring the same result, but unfortunately thats not the case. They have just 1 different line:

1.

Result = 403

SELECT count(*)
FROM (SELECT CONSULTORA.ID CONSULTORA_ID, FIDC.ID FIDC_ID
        FROM public.PESSOA CONSULTORA, public.PESSOA FIDC, public.PESSOA_NEO4J pnj
        WHERE ((pnj.CNPJ = CONSULTORA.CPF_CNPJ AND pnj.FK_ID_FIDC = FIDC.ID)
                OR (pnj.CNPJ = FIDC.CPF_CNPJ AND pnj.FK_ID_FACTORING = CONSULTORA.ID))
            AND CONSULTORA.TIPO = 'EC'
            AND CONSULTORA.TIPO_ENTIDADE_CREDITO IN ('FACTORING', 'SECURITIZADORA')
            AND FIDC.TIPO = 'EC'
            AND FIDC.TIPO_ENTIDADE_CREDITO = 'FIDC'
        GROUP BY CONSULTORA.ID, FIDC.ID)

Result = 946

SELECT count(*)
FROM (SELECT CONSULTORA.ID CONSULTORA_ID, FIDC.ID FIDC_ID
        FROM public.PESSOA CONSULTORA, public.PESSOA FIDC, public.PESSOA_NEO4J pnj
        WHERE ((pnj.CNPJ = CONSULTORA.CPF_CNPJ AND pnj.FK_ID_FIDC = FIDC.ID)
                OR (pnj.CNPJ = FIDC.CPF_CNPJ AND pnj.FK_ID_FACTORING = CONSULTORA.ID))
            AND CONSULTORA.TIPO = 'EC'
            AND CONSULTORA.TIPO_ENTIDADE_CREDITO IN ('FACTORING', 'SECURITIZADORA')
            AND FIDC.TIPO = 'EC'
            AND FIDC.TIPO_ENTIDADE_CREDITO = 'FIDC'
        GROUP BY CONSULTORA.ID, FIDC.ID
        ORDER BY CONSULTORA.ID, FIDC.ID) -- Different Line

Execution Plan [1]:

Return      1   1.000   162.709
    Group By        2   1.000   162.708
        Table Queue     3   1.000   162.708
            Group By        4   0.000   162.688
                Group By        5   0.000   162.688
                    Table Scan      6   0.000   162.688
                        Sort        7   0.000   162.688
                            Nested loop Join        8   0.023   162.687
                                Fetch       20  137,293.000 14.305
                                    [NULL]  TA: PUBLIC.PESSOA_NEO4J [NULL]  137,293.000 [NULL]
                                    RID Scan        21  0.026   14.121
                                        Sort        24  0.026   7.061
                                            Index scan      25  137,293.000 7.060
                                                [NULL]  IX: DB2INST1.PESSOA_NEO4J_CNPJ_IDX3 [NULL]  137,293.000 [NULL]
                                        Sort        22  0.000   7.061
                                            Index scan      23  137,293.000 7.060
                                                [NULL]  IX: DB2INST1.PESSOA_NEO4J_CNPJ_IDX2 [NULL]  137,293.000 [NULL]
                                Rebalance rows between SMP subagents        9   0.023   141.520
                                    Hash Join       10  0.235   141.520
                                        Fetch       16  9,083,719.000   70.776
                                            [NULL]  TA: PUBLIC.PESSOA   [NULL]  9,083,719.000   [NULL]
                                            RID Scan        17  1,742.000   8.379
                                                Sort        18  1,742.000   8.379
                                                    Index scan      19  9,083,719.000   7.886
                                                        [NULL]  IX: DB2INST1.PESSOA_TIPO_IDX    [NULL]  9,083,719.000   [NULL]
                                        Rebalance rows between SMP subagents        11  0.235   70.744
                                            Fetch       12  9,083,719.000   70.743
                                                [NULL]  TA: PUBLIC.PESSOA   [NULL]  9,083,719.000   [NULL]
                                                RID Scan        13  1,742.000   8.379
                                                    Sort        14  1,742.000   8.379
                                                        Index scan      15  9,083,719.000   7.886
                                                            [NULL]  IX: DB2INST1.PESSOA_TIPO_IDX    [NULL]  9,083,719.000   [NULL]

Execution Plan [2]

Return      1   1.000   162.708
    Group By        2   0.000   162.708
        Group By        3   0.000   162.708
            Table Queue     4   0.000   162.708
                Group By        5   0.000   162.688
                    Nested loop Join        6   0.023   162.688
                        Fetch       19  137,293.000 14.305
                            [NULL]  TA: PUBLIC.PESSOA_NEO4J [NULL]  137,293.000 [NULL]
                            RID Scan        20  0.026   14.121
                                Sort        23  0.026   7.061
                                    Index scan      24  137,293.000 7.060
                                        [NULL]  IX: DB2INST1.PESSOA_NEO4J_CNPJ_IDX3 [NULL]  137,293.000 [NULL]
                                Sort        21  0.000   7.061
                                    Index scan      22  137,293.000 7.060
                                        [NULL]  IX: DB2INST1.PESSOA_NEO4J_CNPJ_IDX2 [NULL]  137,293.000 [NULL]
                        Table Scan      7   0.023   141.521
                            Sort        8   0.023   141.520
                                Hash Join       9   0.235   141.520
                                    Fetch       15  9,083,719.000   70.776
                                        [NULL]  TA: PUBLIC.PESSOA   [NULL]  9,083,719.000   [NULL]
                                        RID Scan        16  1,742.000   8.379
                                            Sort        17  1,742.000   8.379
                                                Index scan      18  9,083,719.000   7.886
                                                    [NULL]  IX: DB2INST1.PESSOA_TIPO_IDX    [NULL]  9,083,719.000   [NULL]
                                    Rebalance rows between SMP subagents        10  0.235   70.744
                                        Fetch       11  9,083,719.000   70.743
                                            [NULL]  TA: PUBLIC.PESSOA   [NULL]  9,083,719.000   [NULL]
                                            RID Scan        12  1,742.000   8.379
                                                Sort        13  1,742.000   8.379
                                                    Index scan      14  9,083,719.000   7.886
                                                        [NULL]  IX: DB2INST1.PESSOA_TIPO_IDX    [NULL]  9,083,719.000   [NULL]

Running only the subquery, the row count is actually 946 (so the second query is right).

I guess DB2 does not support count over subquery with same table twice (public.PESSOA) plus GROUP BY.

Do you guys went through the same situation? Is the syntax of first query incorrect? Or probably there is a bug in DB2?

group-by

count

subquery

db2-luw

0 Answers

Your Answer

Accepted video resources