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]