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?