Hi list,

I ran into weird problem (MaxDB 7.5.0.30 on Windows). My query with correlated 
subquery in select
gives me wrong results. Here is the testcase (very simplified).

DDL:

CREATE TABLE TMP_1 (ID_MAIN FIXED(19) NOT NULL PRIMARY KEY)

CREATE TABLE TMP_2 (ID_1 FIXED(19) NOT NULL, ID_2 FIXED(19) NOT NULL, VAL_STR 
VARCHAR(64))

CREATE UNIQUE INDEX TMP_2_UN on TMP_2 (ID_1, ID_2)

CREATE INDEX TMP_2_STR ON TMP_2 (VAL_STR)

INSERT INTO TMP_1 (ID_MAIN) VALUES (1)
INSERT INTO TMP_1 (ID_MAIN) VALUES (2)
INSERT INTO TMP_1 (ID_MAIN) VALUES (3)
INSERT INTO TMP_1 (ID_MAIN) VALUES (4)
INSERT INTO TMP_1 (ID_MAIN) VALUES (5)
INSERT INTO TMP_1 (ID_MAIN) VALUES (6)
INSERT INTO TMP_1 (ID_MAIN) VALUES (7)
INSERT INTO TMP_1 (ID_MAIN) VALUES (8)
INSERT INTO TMP_1 (ID_MAIN) VALUES (9)
INSERT INTO TMP_1 (ID_MAIN) VALUES (10)

INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (1, 1, 'aaa-1')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (2, 1, 'aaa-2')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (3, 1, 'aaa-3')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (4, 1, 'aaa-4')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (5, 1, 'aaa-5')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (6, 1, 'bbb-1')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (7, 1, 'bbb-2')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (8, 1, 'bbb-3')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (9, 1, 'bbb-4')
INSERT INTO TMP_2 (ID_1, ID_2, VAL_STR) VALUES (10, 1, 'bbb-5')

SQL query:

SELECT T2.ID_MAIN AS ID_1, T1.ID_MAIN AS ID_2,
(SELECT IT1.VAL_STR FROM TMP_2 IT1 WHERE IT1.ID_1 = T2.ID_MAIN AND IT1.ID_2 = 
T1.ID_MAIN)
FROM TMP_1 T1, TMP_1 T2, TMP_2 T3
WHERE
(
        (
                T2.ID_MAIN IN (1, 2, 3, 4, 5)
                AND T3.VAL_STR LIKE 'aaa-%'
                AND T3.ID_2 = 1
        )
        OR
        (
                T2.ID_MAIN IN (6, 7, 8, 9, 10)
                AND T3.VAL_STR LIKE 'bbb-%'
                AND T3.ID_2 = 1
        )
)
AND T1.ID_MAIN = 1
AND T2.ID_MAIN = T3.ID_1

Obviously, in the result set I want to get ID_1 in the first column, ID_2 in 
the second and
VAL_STR corresponding to this ID_1-ID_2 pair. But instead I get for the third 
column in the result
whatever but what I expect. It is interesting that if I simplify the condition 
to remove OR-clause
it starts working as expected, like:

SELECT T2.ID_MAIN AS ID_1, T1.ID_MAIN AS ID_2,
(SELECT IT1.VAL_STR FROM TMP_2 IT1 WHERE IT1.ID_1 = T2.ID_MAIN AND IT1.ID_2 = 
T1.ID_MAIN)
FROM TMP_1 T1, TMP_1 T2, TMP_2 T3
WHERE
(
        T2.ID_MAIN IN (1, 2, 3, 4, 5)
        AND T3.VAL_STR LIKE 'aaa-%'
        AND T3.ID_2 = 1
)
AND T1.ID_MAIN = 1
AND T2.ID_MAIN = T3.ID_1

It gives me absolutely correct result. I can see two possibilities here: either 
I'm missing
something or it's a bug in MaxDB :)

Regards.
Alexei Novakov

PS. I didn't try it on 7.6 version.


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

Reply via email to