• User Newbie

    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, Simone

    tabella lingua
    id, lingua
    1, Inglese
    2, Francese

    tabella 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 = -1

    lo 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 NULL

    sul pc-server con la versione 5.0.22 mi restituisce u1 solo record:
    **
    id lingua**
    1 Inglese

    la 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;


  • ModSenior

    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...


  • User Newbie

    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;
    -> 1

    ho 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