>gli insert nelle tabbelle vengono fatti nel seguente modo:
>insert into anag values ('1','2007','12','000571','fresilli','enza',etc);
Certo che un piccolo sforzo in più avrebbe reso il dicorso decisamente più chiaro
Visto che ti interessano solo le colonne societa, anno, mese e cartellino mi limiterò a definire le due tabelle SOLO con esse.
Il seguente codice è per SQL Server 2005 ma rispetta lo standard ANSI SQL-92, pertanto dovrebbe risultare compatibile con MySQL:
USE tempdb;
CREATE TABLE anabud(
anabud_societa int NOT NULL ,
anabud_annobud smallint NOT NULL,
anabud_mese tinyint NOT NULL,
anabud_cartellino char(6) NOT NULL,
CONSTRAINT PK_anabud PRIMARY KEY(
anabud_societa
, anabud_annobud
, anabud_mese
, anabud_cartellino
)
);
CREATE TABLE cosdip(
cosdip_societa int NOT NULL,
cosdip_anno smallint NOT NULL,
cosdip_mese tinyint NOT NULL,
cosdip_cartellino char(6) NOT NULL,
CONSTRAINT PK_cosdip PRIMARY KEY(
cosdip_societa
, cosdip_anno
, cosdip_mese
, cosdip_cartellino
)
);
INSERT INTO anabud VALUES(1, 2007, 12, '000571');
INSERT INTO anabud VALUES(1, 2007, 12, '000572');
INSERT INTO anabud VALUES(1, 2007, 12, '000573');
INSERT INTO anabud VALUES(1, 2007, 12, '000574');
INSERT INTO anabud VALUES(1, 2007, 12, '000575');
INSERT INTO cosdip VALUES(1, 2007, 12, '000571');
INSERT INTO cosdip VALUES(1, 2007, 12, '000572');
INSERT INTO cosdip VALUES(1, 2007, 12, '000574');
INSERT INTO cosdip VALUES(1, 2007, 12, '000575');
/* Soluzione 1: Outer Join */
SELECT A.*
FROM anabud AS A
LEFT JOIN cosdip AS C
ON A.anabud_societa = C.cosdip_societa
AND A.anabud_annobud = C.cosdip_anno
AND A.anabud_mese = C.cosdip_mese
AND A.anabud_cartellino = C.cosdip_cartellino
WHERE C.cosdip_societa IS NULL;
/* Soluzione 2: Clausola NOT EXISTS */
SELECT *
FROM anabud
WHERE NOT EXISTS(
SELECT *
FROM cosdip
WHERE anabud_societa = cosdip_societa
AND anabud_annobud = cosdip_anno
AND anabud_mese = cosdip_mese
AND anabud_cartellino = cosdip_cartellino
);
/* Soluzione 3: Operatore EXCEPT */
SELECT
anabud_societa
, anabud_annobud
, anabud_mese
, anabud_cartellino
FROM anabud
EXCEPT
SELECT
cosdip_societa
, cosdip_anno
, cosdip_mese
, cosdip_cartellino
FROM cosdip;
/* Output:
anabud_societa anabud_annobud anabud_mese anabud_cartellino
-------------- -------------- ----------- -----------------
1 2007 12 000573
(1 row(s) affected)
*/
DROP TABLE anabud, cosdip;
>ti ringrazio per l'attenzione
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org