Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    DB: raggiungere indirettamente informazioni di altre tabelle!

    Salve!
    se io ho tre tabelle così composte (con le lettere intendo i campi):
    TAB1 (IDTAB1, a, b)
    TAB2 (IDTAB2, IDTAB1, c)
    TAB3 (IDTAB3, IDTAB2)

    praticamente collego la tabella uno alla tabella 2 e nella tabella3 collego la tabella 2.

    riesco a recuperare i valori a e b passando dalla tabella 3?

    grazie!

    provando a rileggere non ho capito la mia domanda, comuqneu, swe voi sietet più bravi di me.....

  2. #2
    select a , b
    from tab 1 as uno
    join tab2 as due on uno.IDTAB1 = due.IDTAB1
    join tab3 as tre on tre.IDTAB2 = due.IDTAB2
    where condizione


    la cosa chiaramente ha senso se vuoi recuperare qualcosa nella tabella uno in relazione ad una condizione sulla tabella tre... altrimenti è chiaro che estrai direttamente dalla tabella uno... (stando all'esempio che hai fatto.. che non preleva altro da altre tabelle.. altrimenti è chiaro che serve per mettere in correlazione certi di dati che possono trovarsi su diverse tabelle...)


  3. #3
    bè...tipo: ho una tabella dove registro i dati delle persone, uno dove registro il suo sito web (e dentro questa c'è l'id dell'utente) ed infine una terza tabella, dove compare solo l'id del sito in questa naturalmente non rimetterò l'id utente, perchè altrimenti avrei dati uguali in tabelle diverse...quindi dala tabella tre, è possibile risalire a dati della tabella uno passando dalla seconda...

    grazie!

  4. #4
    beh.. innanzitutto se hai un sito per ogni utente puoi tranquillamente fare tutto in una tabella senza ridondanza...

    se hai + siti per ciascun utente a che ti serve la terza tabella?

    in ogni caso.. come ti ho detto su...

    se mi posti la struttura delle tabelle ti faccio l'esempio sulle tue tabelle.. ma dovrebbe esserti chiao già da su.. magari dai un'occhiata ai join su qualche manuale di SQL


  5. #5
    ecco la struttura:

    codice:
    USERS (IDUser, Nome, Cognome, ... )
    SITI (IDSito, CODUser, Url, ...)
    TAB3 (IDTAB3, CODSito, Pagamento, Data, Note)
    ho usato id e cod a seconda si trattase di chiave primaria o secondaria

    quindi ,io vorrei trovare con il codice sito della tabella 3 l'utente collegto (quindi il webmaster)

  6. #6
    SELECT... cosa? non me l'hai detto
    FROM users AS u
    JOIN siti AS s ON s.coduser = u.iduser
    JOIN tab3 AS t ON t.codsito = s.idsito
    WHERE condizione che non hai specificato..

    come dicevo sopra: la cosa ha senso solo se devi unire dati delle tre tabelle (la seconda funge da cerniera, quindi il discorso vale per la prima e la terza)

    praticamente è una normale select, solo che è fatta su un atabella temporanea ottenuta per unione delle tabelle.. e l'unione è fatta con delle condizioni di join (in questo caso equijoin) sugli id (altrimenti verrebbe fuori un prodotto cartesiano e ogni riga sarebbe in relazione con ogni riga)

    per il resto.. AS serfve a rinominare le tabelle con nomi più brevi da usare poi nella notazione "relazione.attributo"... in questo caso non era strettamente necessario farlo perchè gli attributi delle varie tabelle hanno nomi diversi.. quindi potevi indicare semplicemente i nomi degli attributi.. senz anemmeno rinominare le tabelle.. ma per chiarezza ti ho mostrato il caso più generico


  7. #7
    per il resto.. AS serfve a rinominare le tabelle con nomi più brevi da usare poi nella notazione "relazione.attributo"... in questo caso non era strettamente necessario farlo perchè gli attributi delle varie tabelle hanno nomi diversi.. quindi potevi indicare semplicemente i nomi degli attributi.. senz anemmeno rinominare le tabelle.. ma per chiarezza ti ho mostrato il caso più generico

    grazie!!!! così ho capito anche quest'altra cosa.... :-)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.