Hi,

Have détected a bug : a query doesn't return the good result, dépending of
the
order of the where clauses

Version of MaxDB : 7.5.0.26, Linux
Haven't checked if the problem was known and if it occurs in another
version.

//--------------------------------------------------------------------------
----
//-- Script of the tables
//--------------------------------------------------------------------------
----
create sequence SEQU_IDTC
//
create table IMPORT_DONNEE_TEXTE_COMMUN(
  IDTC_ID           D_LONG not null,    -- |PK|
  IDTC_TXT          D_LIB,              -- Libellé indexé, unique
  IDTC_DTCRE        D_DATETIME_DEFAULT, -- date/heure de création
  IDTC_DTMOD        D_DATETIME,         -- Date/Heure de modification
  primary key(IDTC_ID),
  constraint IND_UNIQ_IDTC_IDTC_TXT unique (IDTC_TXT)
)
//
create sequence SEQU_COSO
//
create table CONTRAT_SOCIETE(
  COSO_ID           D_LONG,             -- |PK|, générée par la séquence
SEQU_COSO
  COGR_ID           D_LONG not null,    -- FK Contrat Groupe
  COSO_CODESOC      D_LIB not null,     -- Code société pour rattachement
import
  COSO_LIB          D_LIB not null,     -- Nom société
  COSO_IDENT_ET     D_LIB,              -- Identifiant unique (pour France =
SIRET)
  COSO_IDENT_ET_PR  D_LIB,              -- Identifiant groupe (pour France =
SIREN)
  PAY_CODE          D_PAY,              -- FK Pays ATTENTION : PEUT ÊTRE
NULL (c'est pas D_R_PAY)
  COSO_NIV          D_LONG not null,    -- Arbre : Niveau
  COSO_BG           D_LONG not null,    -- Arbre : Bord gauche
  COSO_BD           D_LONG not null,    -- Arbre : Bord droit
  COSO_DTCRE        D_DATETIME_DEFAULT, -- Date/Heure de création
  COSO_DTMOD        D_DATETIME,         -- Date/Heure de modification
  primary key(COSO_ID)
)
//
create index IND_COSO_FK_COGR_ID  on CONTRAT_SOCIETE (COGR_ID)
//
create index IND_COSO_FK_PAY_CODE on CONTRAT_SOCIETE (PAY_CODE)
//
create index IND_COSO_COSO_NIV    on CONTRAT_SOCIETE (COSO_NIV)
//
create index IND_COSO_COSO_BG     on CONTRAT_SOCIETE (COSO_BG)
//
create index IND_COSO_COSO_BD     on CONTRAT_SOCIETE (COSO_BD)


//--------------------------------------------------------------------------
----
//-- The query that return FALSE result
//-- le resultset containt ligns vit IMTR_ID <> 399
//--------------------------------------------------------------------------
----
SELECT  *
FROM    SA.IMPORT_DONNEE IMDO
WHERE   (IMTR_ID     = 399)
    AND (IMDO_INTERCO IS NULL)
    AND (
              (IDTC_ID_XIDENT_ET,    PAY_CODE) IN ( SELECT
IDTC.IDTC_ID,
                                                                COSO.PAY_COD
E
                                                    FROM
SA.IMPORT_DONNEE_TEXTE_COMMUN IDTC
                                                    INNER JOIN  ( SELECT
DISTINCT COSO_IDENT_ET,
                                                                            
       PAY_CODE
                                                                  FROM
SA.CONTRAT_SOCIETE
                                                                  WHERE
COGR_ID = 2
                                                                      AND
COSO_IDENT_ET IS NOT NULL
                                                                ) COSO
                                                    ON  COSO.COSO_IDENT_ET =
IDTC.IDTC_TXT)
        ) OR (
              (IDTC_ID_XIDENT_ET_PR, PAY_CODE) IN ( SELECT
IDTC.IDTC_ID,
                                                                COSO.PAY_COD
E
                                                    FROM
SA.IMPORT_DONNEE_TEXTE_COMMUN IDTC
                                                    INNER JOIN  ( SELECT
DISTINCT COSO_IDENT_ET_PR,
                                                                            
       PAY_CODE
                                                                  FROM
SA.CONTRAT_SOCIETE
                                                                  WHERE
COGR_ID = 2
                                                                      AND
COSO_IDENT_ET_PR IS NOT NULL
                                                                ) COSO
                                                    ON COSO.COSO_IDENT_ET_PR
= IDTC.IDTC_TXT)
        )


//--------------------------------------------------------------------------
----
//-- When changing order or the where clause, when pushing "IMTR_ID = 399"
//-- after le IN clauses, it is ok,
//-- When deleting one of then IN clause, it is ok.
//--------------------------------------------------------------------------
----
SELECT  *
FROM    SA.IMPORT_DONNEE IMDO
WHERE   (IMTR_ID     = 399)
    AND (IMDO_INTERCO IS NULL)
    AND (
              (IDTC_ID_XIDENT_ET,    PAY_CODE) IN ( SELECT
IDTC.IDTC_ID,
                                                                COSO.PAY_COD
E
                                                    FROM
SA.IMPORT_DONNEE_TEXTE_COMMUN IDTC
                                                    INNER JOIN  ( SELECT
DISTINCT COSO_IDENT_ET,
                                                                            
       PAY_CODE
                                                                  FROM
SA.CONTRAT_SOCIETE
                                                                  WHERE
COGR_ID = 2
                                                                      AND
COSO_IDENT_ET IS NOT NULL
                                                                ) COSO
                                                    ON  COSO.COSO_IDENT_ET =
IDTC.IDTC_TXT)
        ) OR (
              (IDTC_ID_XIDENT_ET_PR, PAY_CODE) IN ( SELECT
IDTC.IDTC_ID,
                                                                COSO.PAY_COD
E
                                                    FROM
SA.IMPORT_DONNEE_TEXTE_COMMUN IDTC
                                                    INNER JOIN  ( SELECT
DISTINCT COSO_IDENT_ET_PR,
                                                                            
       PAY_CODE
                                                                  FROM
SA.CONTRAT_SOCIETE
                                                                  WHERE
COGR_ID = 2
                                                                      AND
COSO_IDENT_ET_PR IS NOT NULL
                                                                ) COSO
                                                    ON COSO.COSO_IDENT_ET_PR
= IDTC.IDTC_TXT)
        )





Greets


-- 
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to