Log On
Embarcadero Home
QualityCentral
Communities
Articles
Blogs
Resources
Downloads
Help
Quality Central
InterBase
Server
16-bit
BlobFilters
Inet
Internal
Cache
CSV
DSQL
DYN
Journal
JRD
Lock
ODS
Optimizer
Performance Monitoring tables
Remote
International
Performance
Pipe
Security
Shadowing
UDFs
Unsupported
You are not logged in.
Help
Print
Public Report
Report From:
InterBase/Server/Internal
[ Add a report in this area ]
Report #:
43874
Status:
Closed
Bad query result on LEFT JOIN when multiple filters in the join
Project:
InterBase
Build #:
7.5.1.162
Version:
8.0
Submitted By:
Stephane DORIGO
Report Type:
Basic functionality failure
Date Reported:
4/5/2007 5:10:16 AM
Severity:
Serious / Highly visible problem
Last Updated:
4/24/2008 2:06:00 PM
Platform:
95, 98, 2000, NT, XP
Internal Tracking #:
251610
Resolution:
Fixed
(Resolution Comments)
Resolved in Build:
:
9.0
Duplicate of:
None
Voting and Rating
Overall Rating:
No Ratings Yet
0.00 out of 5
Total Votes:
4
Description
IB (7.5.1 or 2007) returns a bad result in some queries whose have multiple filters in LEFT JOIN.
Steps to Reproduce:
Execute this script to create the example DB:
SET NAMES ISO8859_1;
SET SQL DIALECT 3;
CREATE DATABASE "ServATYS:E:\Temp\DBClients\IBBug.GDB" PAGE_SIZE 1024
DEFAULT CHARACTER SET ISO8859_1;
COMMIT;
CREATE TABLE T1
(
Id INTEGER NOT NULL,
Id_T2 INTEGER NOT NULL,
Id_T3 INTEGER NOT NULL,
CONSTRAINT P_T1_Id PRIMARY KEY (Id)
);
COMMIT;
CREATE TABLE T2
(
Id INTEGER NOT NULL,
CONSTRAINT P_T2_Id PRIMARY KEY (Id)
);
COMMIT;
CREATE TABLE T3
(
Id INTEGER NOT NULL,
CONSTRAINT P_T3_Id PRIMARY KEY (Id)
);
COMMIT;
INSERT INTO T2 (Id) VALUES (1);
INSERT INTO T2 (Id) VALUES (2);
INSERT INTO T2 (Id) VALUES (3);
INSERT INTO T3 (Id) VALUES (1);
INSERT INTO T3 (Id) VALUES (2);
INSERT INTO T3 (Id) VALUES (3);
INSERT INTO T1 (Id,Id_T2,Id_T3) VALUES (1,1,1);
INSERT INTO T1 (Id,Id_T2,Id_T3) VALUES (2,1,2);
INSERT INTO T1 (Id,Id_T2,Id_T3) VALUES (3,3,2);
COMMIT;
Now, in IBConsole, try this 3 queries:
1) SELECT
T1.Id, T2.Id, T3.Id
FROM
T1
LEFT JOIN T2 ON T2.Id = T1.Id_T2
LEFT JOIN T3 ON T3.Id = T1.Id_T3
WHERE
T1.Id = 1
The result is:
1 1 1
It's Ok.
2) SELECT
T1.Id, T2.Id, T3.Id
FROM
T1
LEFT JOIN T2 ON T2.Id = T1.Id_T2
LEFT JOIN T3 ON T3.Id = T1.Id_T3 AND T3.Id <> 1
WHERE
T1.Id = 1
The result is:
1 1 <Null>
It's Ok.
3) SELECT
T1.Id, T2.Id, T3.Id
FROM
T1
LEFT JOIN T2 ON T2.Id = T1.Id_T2
LEFT JOIN T3 ON T3.Id = T1.Id_T3 AND T3.Id > 1
WHERE
T1.Id = 1
The result is:
NOTHING !!
It would be :
1 1 <Null>
Like the second query...
==> Bug.
Workarounds
SELECT
T1.Id, T2.Id, T3b.Id
FROM
T1 T1
LEFT JOIN T2 T2 ON T2.Id = T1.Id_T2
LEFT JOIN T3 T3a ON T3a.Id = T1.Id_T3
LEFT JOIN T3 T3b ON T3b.Id = T3a.Id AND T3b.Id > 1
WHERE
T1.Id = 1
The result is:
1 1 <Null>
It's Ok.
---------
SELECT
T1.Id, T2.Id, T3b.Id
FROM
T1 T1
LEFT JOIN T2 T2 ON T2.Id = T1.Id_T2
LEFT JOIN T3 T3a ON T3a.Id = T1.Id_T3
LEFT JOIN T3 T3b ON T3b.Id = T3a.Id AND T3b.Id > 1
WHERE
T1.Id = 1
The result is:
1 1 <Null>
It's Ok.
Attachment
None
Comments
None
View Your Reports
Search
Server Response from: CODE1
Developer Tools
Blackfish SQL
C++Builder
Delphi
Delphi for PHP
Delphi Prism
InterBase
JBuilder
J Optimizer
3rdRail & TurboRuby
Database Tools
Change Manager
DBArtisan
DB Optimizer
ER/Studio
Performance Center
Rapid SQL
Technical Articles
Tutorials
White Papers
Press Releases
Newsletters
Add Content (GetPublished)
Audio
Audio & Video
Video
Bugs & Suggestions (QualityCentral)
Discussion Forums
Examples (CodeCentral)
Tags
Technology Partners
Downloads
Free Trials
Registered User Downloads
Beta Programs
Add Content (GetPublished)
Articles
Blogs
Bugs & Suggestions (QualityCentral)
Chats
Discussion Forums
Examples (CodeCentral)
Member Services
About