Mostra notizie nelle discussioni
  • Avatar
    ☺
    Scritto da
    ::1
    il 2014-02-14 09:16:27.0 alle 2014-02-14 09:16:27.0
    Trollate totali: 12321
    [mysql] strano comportamento in join
    Ecco le tabelle e dati di esempio: spero sia comprensibile le entità che vanno a rappresentare.

    create table lav_lavorazione (
    	lav_id int(12) auto_increment not null primary key,
    	lav_data_fine datetime
    );
    
    create table inf_info_lavorazione (
    	inf_id int(12) auto_increment not null primary key,
    	sample_data varchar(20)
    );
    
    create table com_componenti_lavorazione (
    	com_lav_id int(12) references lav_lavorazione (lav_id),
    	com_inf_id int(12) references inf_info_lavorazione (inf_id),
    	constraint pk_com primary key (
    		com_lav_id, com_inf_id
    	)
    );
    
    create table sta_stato_lavorazione (
    	sta_id int(12) auto_increment not null primary key,
    	sta_lav_id int(12) references lav_lavorazione (lav_id),
    	sta_data_fine datetime
    );
    
    insert into lav_lavorazione ( lav_data_fine ) values (null); -- crea lav_id 1
    insert into inf_info_lavorazione (sample_data) values ('pippo'); -- crea inf_id 1
    insert into com_componenti_lavorazione values (1, 1);
    insert into sta_stato_lavorazione (sta_lav_id, sta_data_fine) values (1,null); -- crea sta_id 1
    insert into sta_stato_lavorazione (sta_lav_id, sta_data_fine) values (1,current_timestamp); -- crea sta_id 2
    


    Ora, se io eseguo la query:
    select lav_id, inf_id, sta_id, lav_data_fine, sta_data_fine, sample_data
    from lav_lavorazione, inf_info_lavorazione, com_componenti_lavorazione, sta_stato_lavorazione
    where lav_id = com_lav_id
    and lav_id = sta_lav_id
    and inf_id = com_inf_id
    

    mi torna correttamente due record:
    +--------+--------+--------+---------------+---------------------+-------------+
    | lav_id | inf_id | sta_id | lav_data_fine | sta_data_fine       | sample_data |
    +--------+--------+--------+---------------+---------------------+-------------+
    |      1 |      1 |      1 | NULL          | NULL                | pippo       |
    |      1 |      1 |      2 | NULL          | 2014-02-14 09:09:24 | pippo       |
    +--------+--------+--------+---------------+---------------------+-------------+
    
    2 rows in set (0.00 sec)
    



    Se aggiungo la condizione per filtrare con data_fine non nulla su entrambe le tabelle:
    select lav_id, inf_id, sta_id, lav_data_fine, sta_data_fine, sample_data
    from lav_lavorazione, inf_info_lavorazione, com_componenti_lavorazione, sta_stato_lavorazione
    where lav_id = com_lav_id
    and lav_id = sta_lav_id
    and inf_id = com_inf_id
    and sta_data_fine is not null
    and lav_data_fine is not null
    

    Non mi torna nessun record.

    Non dovrei avere invece i record che matchano la query, quindi il primo dei due record di prima?
    Young professional woman and busy mom.
<softv>

Pagina generata in 76 millisecondi

Utenti attivi: 10 nell'ultimo minuto, 22 negli ultimi cinque minuti, 47 negli ultimi 15 minuti