[MySQL] Bug in versie 3.23.56

Pagina: 1
Acties:

  • Renetjuh
  • Registratie: Maart 2002
  • Niet online
Probleemomschrijving

een SELECT query van de volgende vorm geeft het verkeerde resultaat
SELECT * FROM Table1 NATURAL JOIN Table2 WHERE 1 AND (b AND c)

b and c zijn hier willekeurige boolean expressies.
Het lijkt erop dat in dit geval de boolean expressie c wordt genegeerd.
Als de haakjes weggelaten worden of als de expressies 1 en (b AND c) worden omgewisseld, dan wordt expressie c wél uitgevoerd

Opmerking: in versie 3.23.46 voor Windows 2000 werkte het prima.

Wanneer gaat het fout?

Als er twee tabellen aangemaakt worden (Test1 en Test2) waarop een natural join wordt uitgevoerd van de volgende vorm :

CREATE TABLE Test1 (ID INTEGER NOT NULL PRIMARY KEY, Value1
VARCHAR(255));
CREATE TABLE Test2 (ID INTEGER NOT NULL PRIMARY KEY, Value2
VARCHAR(255));
INSERT INTO Test1 VALUES (1, 'A');
INSERT INTO Test2 VALUES (1, 'B');

Het resultaat van de volgende query zou een lege result set moeten zijn:
SELECT * FROM Test1 NATURAL JOIN Test2
WHERE 1 AND (Value1 = 'A' AND Value2 <> 'B')

Maar de query geeft hetzelfde resultaat als dat de expressie Value2 <> 'B' is weggelaten.

De volgende queries geven overigens wél het juiste resultaat:
SELECT * FROM Test1 NATURAL JOIN Test2
WHERE 1 AND Value1 = 'A' AND Value2 <> 'B'

SELECT * FROM Test1 NATURAL JOIN Test2
WHERE (Value1 = 'A' AND Value2 <> 'B') AND 1


Heeft iemand dit ooit meegemaakt of is het probleem bij jou ook aanwezig?? Dit is echt gewoon een grote fout. Het SQL statement wordt gewoon op de verkeerde manier geinterpreteerd |:(