Select per controllo integrità referenziale

di il
1 risposte

Select per controllo integrità referenziale

Ciao
Sono nuovo del forum e volevo porre una domanda
Devo creare una select di controllo del tipo select count(*) from [tab] where... per controllare l'integrità referenziale tra 2 tabelle con più campi collegati.
Mi spiego meglio con un esempio:
TABELLAa (TaC1, TaC2, TaC3, Tac4, TaC5)
TABELLAb (TbC1, TbC2, TbC3, Tbc4, TbC5)
I Campi TbC1, TbC2, TbC3 sono chiavi esterne della tabella a rispettivamente TaC1, TaC2, TaC3.
Creare una select dell tipo
- SELECT COUNT(*) FROM TABELLAb WHERE TbC1 NOT IN (SELECT TaC1 from TABELLAa)
- SELECT COUNT(*) FROM TABELLAb WHERE TbC2 NOT IN (SELECT TaC2 from TABELLAa)
- SELECT COUNT(*) FROM TABELLAb WHERE TbC3 NOT IN (SELECT TaC3 from TABELLAa)
Non controlla correttamente l'integrità referenziale perchè controlla i singoli campi.
Riesco con una sola istruzione ad estraolare il numero di righe della TABELLAb che non rispettano l'integrità?

Grazie
Corti

1 Risposte

  • Re: Select per controllo integrità referenziale

    In DB2 scriverei

    SELECT COUNT(*) FROM TABELLAb WHERE TbC1 !! TbC2 !! TbC3 NOT IN (SELECT TaC1 !! TaC2 !! TaC3 from TABELLAa)

    dove !! è l'operatore di concatenazione; ovviamente se i tuoi dati non sono stringhe li devi convertire, quindi la tua query potrebbe essere

    SELECT COUNT(*) FROM TABELLAb WHERE CHAR(TbC1) !! CHAR(TbC2) !! CHAR(TbC3) NOT IN (SELECT CHAR(TaC1) !! CHAR(TaC2) !!CHAR(TaC3) from TABELLAa)

    dove la funzione CHAR() mi restituisce il valore di una colonna trasformato in stringa di testo.
    Tu dovrai usare le funzioni corrispondenti del tuo DB.
    Ciao.
Devi accedere o registrarti per scrivere nel forum
1 risposte