Newsgroup: it.comp.appl.access
Titolo: SELECT nidificate con chiave primaria composta

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Salve a tutti,
Ho una tabella articoli la cui chiave primaria è costituita da tre
campi. Al momento di aggiornare questa tabella devo verificare che
gli articoli non presenti nel nuovo listino (e quindi da eliminare)
non siano utilizzati in un'altra tabella che relaziona gli articoli a
dei prodotti composti da più articoli.
Posso selezionare gli articoli da cancellare così:
SELECT SiglaFornitore + CodiceInterno + CodiceFornitore AS ID
FROM dbo.ARTICOLI
WHERE (NOT ((SiglaFornitore + CodiceInterno + CodiceFornitore) IN
             (SELECT SiglaFornitore + CodiceInterno + CodiceFornitore
              FROM dbo.tmpARTICOLI)))
[Apro una parentesi: è corretto selezionare una chiave composta in
questo modo o esiste un modo più semplice?]
Se però metto questa SELECT come clausola di un'altra select ho dei
problemi:
SELECT VOCE
FROM dbo.COMPOSIZIONE_VOCI
WHERE ((SiglaFornitore + CodiceInterno + CodiceFornitore) IN
        (SELECT SiglaFornitore + CodiceInterno + CodiceFornitore
         FROM dbo.ARTICOLI
         WHERE (NOT ((SiglaFornitore + CodiceInterno +
CodiceFornitore) IN
                      (SELECT SiglaFornitore + CodiceInterno +
CodiceFornitore
                       FROM dbo.tmpARTICOLI)))))
Non funziona nulla credo perchè la seconda SELECT senza AS ID non è
corretta (anche se non restituisce errori).
Suggerimenti?
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPXN+C8g6j/rIOLofEQIUlwCgv55OZiJ3sscPMCLaxfq4uvFhq4UAn2Ua
KGNu4xC8PzhLy8O5aOlThlIf
=m7xt
-----END PGP SIGNATURE-----

 Suggerimenti?
--
Ciao :-)
Maurizio
--------
?SPQR(C)
 X
--------

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Grazie mille per la risposta Maurizio, in realtą la forma che ho
messo nel primo post funzionava gią correttamente, mi ero dimenticato
di impostare i dati nelle tabelle per fare i test... :(
Cmq ora ho un'altra forma da testare per migliorare le prestazioni!
:)
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPXRHA8g6j/rIOLofEQLEwQCg1yInoE/JSBBILbpJfdVeRcwM40gAn2MM
/hKi86PKkwX1vaIMVXB0xMfK
=JKP2
-----END PGP SIGNATURE-----

Se ho capito bene, il tuo caso si dovrebbe ricondurre al seguente.
Date tre tabelle di nome Tabellax con x=1,2,3 contenti ciascuna record
identificabili con una chiave composta da tre campi di nome
x_A,x_B,x_C con x=1,2,3 selezionare i record di Tabella1 che non hanno
record corrispondenti in base alla chiave sopra detta nè in Tabella2
nè in Tabella3.
Per chiarire meglio, la struttura di Tabella1 è:
1_A
1_B
1_C
... altri campi
La struttura di Tabella2 è:
2_A
2_B
2_C
... altri campi
La struttura di Tabella3 è:
3_A
3_B
3_C
... altri campi
Quella che segue è l'istruzione SQL che realizza quanto sopra
descritto.
SELECT Tabella1.* FROM (Tabella1 LEFT JOIN Tabella2 ON (Tabella1.[1_C]
= Tabella2.[2_C]) AND (Tabella1.[1_B] = Tabella2.[2_B]) AND
(Tabella1.[1_A] = Tabella2.[2_A])) LEFT JOIN Tabella3 ON
(Tabella1.[1_C] = Tabella3.[3_C]) AND (Tabella1.[1_B] =
Tabella3.[3_B]) AND (Tabella1.[1_A] = Tabella3.[3_A])
WHERE (((Tabella2.[2_A]) Is Null) AND ((Tabella2.[2_B]) Is Null) AND
((Tabella2.[2_C]) Is Null) AND ((Tabella3.[3_A]) Is Null) AND
((Tabella3.[3_B]) Is Null) AND ((Tabella3.[3_C]) Is Null));
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400:
http://www.faq400.com/
---------------------------------------------

 Tabella2 nè in Tabella3.
In effetti il problema non era molto chiaro...
Devo trovare i record di Tabella1 che HANNO dei corrispondenti
nell'insieme di record di Tabella2 che NON HANNO corrispondenti in
Tabella3.
In ogni caso grazie per la risposta!
- --
Matteo Palmieri - Cybercreations
www.cybercreations.it
-----BEGIN PGP SIGNATURE-----
Version: 6.5.8ckt
Comment: KeyID: 0xC83A8FFAC838BA1F
Comment: Fingerprint: 69F4 29D4 5913 B3B6 EDD2  B335 C83A 8FFA C838 BA1F
iQA/AwUBPXSFzcg6j/rIOLofEQLg2ACfaWzAz8WjbOmeYTkr2pU6z0+0LWsAoOCe
J3vUG1z3yElHN6FgxWpjFpDu
=DTj3
-----END PGP SIGNATURE-----