- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- Mysql numero record restituiti inaspettato, bug?
-
Mysql numero record restituiti inaspettato, bug?
Salve a tutti,
sono nuovo è mi affaccio su questo forum con un problema davvero davvero strano.
Partendo dai soliti dati (di cui riporto il dump in calce alla discussione),
quando eseguo una query sulla mio pc con versione mysql 5.0.37 ho un risulatato diverso da quello che mi da il pc-server con mysql versione 5.0.22.
Riassumo un esempio in cui si verica tale problema:
questa sono le tabelle
tabella persona
id, nome
1, Marco
2, Simonetabella lingua
id, lingua
1, Inglese
2, Francesetabella persona_lingua
id, id_persona, id_lingua
1, 1, 1
questa è la query in questione che mi restituisce numero di record diversi, 2 sul mio pc, 1 sul pc-server:
SELECT persona.id, lingua. *
FROM (
(
persona
LEFT JOIN persona_lingua ON persona.id = persona_lingua.id_persona
)
LEFT JOIN lingua ON lingua.id = persona_lingua.id_lingua
)
WHERE lingua.id = -1 OR -1 = -1lo so la condizione non ha senso, ma è solo per riportare il problema a l'osso,
nel caso reale le clausole WHERe sono diverse, le ho semplificate solo per analizzare meglio il problema.
sulla mia macchina con la versione 5.0.37 mi restituisce 2 record:
** id lingua**
1 Inglese
2 NULLsul pc-server con la versione 5.0.22 mi restituisce u1 solo record:
**
id lingua**
1 Inglesela cosa a me pare veramente strana, per quanto mi riguarda il risultato corretto è quello che reststituisce il mysql del mio pc, voi cosa ne pensate?
ringrazio anticipatamente chi vorrà aiutarmi nella risoluzione di questo problema
qui sotto riporto l'SQL-dump per le buone anime che vogliano fare delle prove:
CREATE TABLE
persona
(
id
INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
nome
VARCHAR( 50 ) NULL
) ENGINE = MYISAM;INSERT INTO
persona
(id
,nome
)
VALUES ('1', 'Marco'), ('2', 'Simone');CREATE TABLE
lingua
(
id
INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
lingua
VARCHAR( 50 ) NULL
) ENGINE = MYISAM;INSERT INTO
lingua
(id
,lingua
)
VALUES ('1', 'Inglese'), ('2', 'Francese');CREATE TABLE
persona_lingua
(
id
INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
id_persona
INT( 11 ) NULL ,
id_lingua
INT( 11 ) NULL
) ENGINE = MYISAM;INSERT INTO
test
.persona_lingua
(id
,id_persona
,id_lingua
)
VALUES ('1', '1', '1');SELECT persona.id, lingua.lingua
FROM ((persona
LEFT JOIN persona_lingua ON persona.id = persona_lingua.id_persona)
LEFT JOIN lingua ON lingua.id = persona_lingua.id_lingua)
WHERE lingua.id = -1 OR -1 = -1;
-
In quel modo deve mostrarti tutto il contenuto della tabella sicuro che il numero di record nei 2 database sia uguale?
perchè in effetti è un tantinello strana come cosa...
-
Si sicurissimo.
Di fatti dovrebbero tornare 2 risultati (i record della tabella persona) a conferma di ciò direttamente dalla documentazione MySql:Logical OR. When both operands are non-NULL, the result is 1 if any operand is non-zero, and 0 otherwise. With a NULL operand, the result is 1 if the other operand is non-zero, and NULL otherwise. If both operands are NULL, the result is NULL.
mysql> SELECT 1 || 1;
-> 1
mysql> SELECT 1 || 0;
-> 1
mysql> SELECT 0 || 0;
-> 0
mysql> SELECT 0 || NULL;
-> NULL
mysql> SELECT 1 || NULL;
-> 1ho fatto dei test su una altro server con versione mysql 5.0.44
ed il risultato e correttamente 2.A questo punto credo che il problema sia o relativo ad un bug della
versione 5.0.22 o relativo all'installazione di quel mysql su quel server.Mi piacerebbe avere un parere da qualcuno che ha installato una versione 5.0.22
Grazie per l'interessamento