Hi Robert.

My query is not a problem - I know how to rewrite it to make it work. This is 
just a testcase to demonstrate possible DB bug.

Regards.
Alexei

----- Original Message ----
From: Robert Klemme <[EMAIL PROTECTED]>
To: Alexei Novakov <[EMAIL PROTECTED]>
Cc: MaxDB mailing list. <maxdb@lists.mysql.com>
Sent: Friday, August 11, 2006 4:07:53 AM
Subject: Re: Subquery with OR-condition error.

2006/8/11, Alexei Novakov <[EMAIL PROTECTED]>:
> Hi all,
>
> Neerly a year ago I wrote this message to this list:
>
> <quote>
> 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

Can't you juse use an ordinary join?

# untested

SELECT T2.ID_MAIN AS ID_1, T1.ID_MAIN AS ID_2, IT1.VAL_STR
FROM TMP_1 T1, TMP_1 T2, TMP_2 T3, TMP_2 IT1
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
AND IT1.ID_1 = T2.ID_MAIN AND IT1.ID_2 = T1.ID_MAIN

Kind regards

robert






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

Reply via email to