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.

Pagina generata in 61 millisecondi

Utenti attivi: 7 nell'ultimo minuto, 23 negli ultimi cinque minuti, 37 negli ultimi 15 minuti