Ciao una soluzione potrebbe essere quella di usare una stored procedure, questo tuttavia è possibile solo a partire da MySQL 5.0!
Una soluzione possibile sarebbe la seguente:
1. creare una tabella chiamata myId
create table myId (id int unsigned not null primary key);
2. creare la seguente stored procedure
create procedure getOrdini()
begin
declare ordinefornitore int unsigned;
declare dataric date;
declare ordineinstallazione int unsigned;
declare eof int default 0;
declare eofB int default 0;
declare flag int default 0;
declare curFornitore cursor for select idordine, dataricezione from ordini.ordinefornitore;
declare curInstallazione cursor for select idordine from ordini.installazione;
declare continue handler for sqlstate \'02000\' set eof=1; #handler che intercetta la fine di un recordset
delete from ordini.myId where id is not null; #elimina tutti i record present in myId
open curFornitore;
repeat
set flag=0; # 0 se l\'ordine non è presente in ordinefornitore altrimenti 1
set eof=0;
open curInstallazione;
fetch curFornitore into ordinefornitore, dataric;
set eofB=eof;
repeat
fetch curInstallazione into ordineinstallazione;
if ordinefornitore = ordineinstallazione then
set flag=1;
set eof=1;
end if;
until eof end repeat;
if flag = 0 then
if dataric is not null then
insert into ordini.myId values (ordinefornitore);
end if;
end if;
close curInstallazione;
set eof=eofB;
until eof end repeat;
close curFornitore;
end
3. per ottenere gli id desiderati eseguire le seguenti istruzioni:
call getOrdini();
select ordine.* from ordine, myId where ordine.idordine = myId.id;
n.b. per inserire una procedura in mysql si può salvare il codice della procedura in un file qualsiasi, ad esempio getOrdini.sql, e poi una volta avviato il client di mysql digitiare:
delimiter //
\\.
\\getOrdini.sql
delimiter ;
Il comando delimiter serve per modificare il delimitatore di fine istruzione!