INNER JOIN ?

di
Anonimizzato10848
il
2 risposte

INNER JOIN ?

SCENARIO :

Creazione di un database Rubrica.

Ogni record (persona) di tale tabella deve poter essere associata ad una tipologia (es. amico, collega, parente etc).

Ogni record (persona) può appartenere a più di una tipologia (es. Amilcare Rossi è sia amico che collega mentre Maria Bianchi è solo una cliente)

La tipologia di appartenenza (amico, cliente, etc) deve essere scalabile e dev’essere possibile aggiungere nuove tipologie.


TABELLE :

TABELLA TPersone (PK_Persone, Nome, Cognome, Cell) ? Contiene l’anagrafica della persona
TABELLA TAssociazionePersonaTipologia (PK_Associazione, FK_Persona, FK_Tipologia)
TABELLA TTipologia (PK_Tipologia, Tipo) ? contiene le tipologie (es. amico, parente, collega etc)

La tabella TAssociazionePersonaTipologia relaziona in modo flessibile la tabella TPersona e TTipologia in quanto la sua chiave esterna FK_Persona punta in modo univoco ad una persona e la sua chiave esterna FK_Tipologia punta ad una tipologia da associare a quella persona.
L’utilizzo di una tabella di associazione permette di creare più associazioni per ogni singola persona.

PROBLEMA :
creare una query SQL per interrogare la base dati ed ottenere il cognome delle persone associate ad una tipologia (es. ottenere tutti i cognomi delle persone classificate come “collega”). Devo utilizzare una INNER JOIN nidificata?

Ho provato questo comando ma mi da errore evidenzioando la clausola "WHERE" :
SELECT *
FROM TPersone
INNER JOIN
(TAssociazioneTipologia INNER JOIN TTipologia ON TAssociazioneTipologia.FK_Tipologia = TTipologia.PK_Tipologia WHERE TTipologia.Tipologia = 'amico')
ON TPersone.PK_Persone = TAssociazioneTipologia.FK_Persona;

Qualcuno di voi puo' illuminarmi? GRAZIE!!!

2 Risposte

  • Re: INNER JOIN ?

    pitopito ha scritto:


    PROBLEMA :
    creare una query SQL per interrogare la base dati ed ottenere il cognome delle persone associate ad una tipologia (es. ottenere tutti i cognomi delle persone classificate come “collega”)
    Non so usare le query sfruttando SQL, ma la soluzione è semplice. Io te lo descrivo passo passo, poi tu, se vuoi, puoi estrapolare il conseguente SQL.

    1) Crea una query importando tutte e 3 le tabelle
    2) Trascina nella griglia i campi che ritieni opportuni, ma soprattutto (faccio riferimento alla tua domanda)
    TPersone.Cognome
    TTipologia.Tipo
    3) In basso, nella griglia, in corrispondeza del rigo Criteri: e alla colonna Tipo, scrivi così:
    Like "collega"
    quando vuoi fare riferimento a questa tipologia. Analogamente, al posto di "collega", puoi scrivere un'altra delle tipologie (secondo il campo Tipo ovviamente).
    4) Salva la query nominandola "Colleghi"

    In questo modo, immagino tu avresti più query con le diverse tipologie.

    Se non vuoi avere molte query, potresti crearne una sola con parametro. Al punto 3) modifica quello che devi scrivere in corrispondenza di Criteri al campo Tipo, cioè:
    Like [Digita la Tipologia]

    Quando vai ad eseguire la query con parametro, ti apparirà una finestra dove dovrai digitare una tipologia. Il resto va da sè.
  • Re: INNER JOIN ?

    Hey funziona!!
    Grazie mille!

    Anche se volevo imparare come utilizzare la INNER JOIN, posso comunque vedere il comando SQL riferito alla query sviluppata in modo "grafico" con Access, che in questo caso e' :

    SELECT TPersone.Nome
    FROM TTipologia INNER JOIN (TPersone INNER JOIN TAssociazioneTipologia ON TPersone.PK_Persone = TAssociazioneTipologia.FK_Persona) ON TTipologia.PK_Tipologia = TAssociazioneTipologia.FK_Tipologia
    WHERE (((TTipologia.Tipologia) Like "amico"));

    GRAZIE!!!
Devi accedere o registrarti per scrivere nel forum
2 risposte