Visualizzazione dei risultati da 1 a 10 su 10

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592

    [mysql] left join doppia su stesso campo

    ho una query dove pesco tramite il riferimento all'id di una tabella e stampo il nome della persona in questione.
    questa persona, in veste di collaboratore, potrebbe comparire in un altro campo.
    cioè tipo:
    SELECT a.id_persona , a.collaboratore_persona b.id_persona, b.nome_persona
    FROM opere a

    LEFT JOIN persone b ON (b.id_persona = a.persona)
    LEFT JOIN persone b ON (b.id_persona = a.collaboratore_persona)

    la tabella persone è la tabella dell'anagrafica e nella tabella opere ci sono delle opere

    non so se si capisce, spero sia chiaro, ma non so come "chiamare" i campi per farli venire fuori diversi perchè il nome del campo nella tabella persone è lo stesso, è la join che è diversa

    grazie in anticipo a chi vorrà darmi una mano

  2. #2
    usa AS per dare un alias al campo

    SELECT campo1 AS nome FROM tabella

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    Quote Originariamente inviata da optime Visualizza il messaggio
    usa AS per dare un alias al campo

    SELECT campo1 AS nome FROM tabella
    s� e no.. quando faccio la join
    LEFT JOIN persone b ON (b.id_persona = a.persona)
    LEFT JOIN persone b ON (b.id_persona = a.collaboratore_persona)
    mi d� errore: "
    Not unique table/alias: 'b'"
    l'alias glielo posso anche dare, ma non posso fare una select 2 volte dello stesso campo nella query..
    cio� come faccio a fargli fare la differenza tra la prima e la seconda join?

  4. #4
    e comunque la risposta è semplice: usa DUE alias diversi

  5. #5
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    Quote Originariamente inviata da optime Visualizza il messaggio
    e comunque la risposta è semplice: usa DUE alias diversi
    QUESTA RISPOSTA QUA NON L'AVEVO VISTA!!!

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    comunque sì, ho fatto così:
    codice:
    SELECT a.id_opere , a.titolo , a.categoria , a.data_consegna , a.data_uscita , a.tiratura , a.prezzo ,
     a.pagine , a.copie_anno , a.id_materia , a.editore , a.collaboratore_editore , a.tipologia , a.mandato ,
     a.note_opera , a.id_rif_anagrafica , a.id_rif_anagrafica2 , a.id_rif_anagrafica3 , a.id_rif_anagrafica4 ,
     a.id_rif_anagrafica5, cc.id_anagrafica, cc.nome AS NOME1, cc.cognome AS COGNOME1,  dd.id_anagrafica,
     dd.nome AS NOME2, dd.cognome AS COGNOME2,  ee.id_anagrafica, ee.nome AS NOME3,
    ee.cognome AS COGNOME3,  ff.id_anagrafica, ff.nome AS NOME4, ff.cognome AS COGNOME4,
      gg.id_anagrafica, gg.nome AS NOME5, gg.cognome AS COGNOME5, b1.id_editore, b2.id_editore,
     b1.nome_editore as NOME_EDITORE, b2.nome_editore as NOME_COLLABORATORE,
     h.id_tipologia, h.tipologia_opere, m.id_rif_materia, m.materia, n.id_categoria, n.nome_categoria, a.forfait ,
     a.invenduto, a.bassa_perc, a.media_perc, a.alta_perc, a.copie_basso, a.copie_medio, a.copie_alto,
     a.probabilita, a.curatore1, a.curatore2, a.curatore3, a.curatore4, a.curatore5, a.ebook, a.cartaceo,
     a.online, a.uscita_opera FROM opere a 
        LEFT JOIN anagrafica_note cc ON (cc.id_anagrafica = a.id_rif_anagrafica)
        LEFT JOIN anagrafica_note dd ON (dd.id_anagrafica = a.id_rif_anagrafica2)
        LEFT JOIN anagrafica_note ee ON (ee.id_anagrafica = a.id_rif_anagrafica3)
        LEFT JOIN anagrafica_note ff ON (ff.id_anagrafica = a.id_rif_anagrafica4)
        LEFT JOIN anagrafica_note gg ON (gg.id_anagrafica = a.id_rif_anagrafica5)
    LEFT JOIN editore b1 ON (b1.id_editore = a.editore)
    LEFT JOIN editore b2 ON (b2.id_editore = a.collaboratore_editore)
    LEFT JOIN tipologia h ON (h.id_tipologia = a.tipologia)
        LEFT JOIN materie m ON (a.id_materia = m.id_rif_materia)
        LEFT JOIN categorie n ON (a.categoria = n.id_categoria) WHERE id_opere = 1
    spettacolare!!

  7. #7
    perché non posti TUTTA la query? ricordati sempre di usare il tag CODICE

  8. #8
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    volevo evitare perchè è "lunga"
    codice:
    SELECT a.id_opere , a.titolo , a.categoria , a.data_consegna , a.data_uscita , a.tiratura , a.prezzo , a.pagine ,
     a.copie_anno , a.id_materia , a.editore , a.collaboratore_editore , a.tipologia , a.mandato , a.note_opera ,
     a.id_rif_anagrafica , a.id_rif_anagrafica2 , a.id_rif_anagrafica3 , a.id_rif_anagrafica4 , a.id_rif_anagrafica5,
     cc.id_anagrafica, cc.nome AS NOME1, cc.cognome AS COGNOME1,  dd.id_anagrafica, dd.nome AS NOME2,
     dd.cognome AS COGNOME2,  ee.id_anagrafica, ee.nome AS NOME3, ee.cognome AS COGNOME3,  ff.id_anagrafica,
     ff.nome AS NOME4, ff.cognome AS COGNOME4,  gg.id_anagrafica, gg.nome AS NOME5, 
    gg.cognome AS COGNOME5, b.id_editore, b.nome_editore, h.id_tipologia, h.tipologia_opere, m.id_rif_materia,
     m.materia, n.id_categoria, n.nome_categoria, a.forfait , a.invenduto, a.bassa_perc, a.media_perc, a.alta_perc,
     a.copie_basso, a.copie_medio, a.copie_alto, a.probabilita, a.curatore1, a.curatore2, a.curatore3, a.curatore4,
     a.curatore5, a.ebook, a.cartaceo, a.online, a.uscita_opera FROM opere a 
        LEFT JOIN anagrafica_note cc ON (cc.id_anagrafica = a.id_rif_anagrafica)
        LEFT JOIN anagrafica_note dd ON (dd.id_anagrafica = a.id_rif_anagrafica2)
        LEFT JOIN anagrafica_note ee ON (ee.id_anagrafica = a.id_rif_anagrafica3)
        LEFT JOIN anagrafica_note ff ON (ff.id_anagrafica = a.id_rif_anagrafica4)
        LEFT JOIN anagrafica_note gg ON (gg.id_anagrafica = a.id_rif_anagrafica5)
        LEFT JOIN editore b ON (b.id_editore = a.editore)
        LEFT JOIN editore b ON (b.id_editore = a.collaboratore_editore)
        LEFT JOIN tipologia h ON (h.id_tipologia = a.tipologia)
        LEFT JOIN materie m ON (a.id_materia = m.id_rif_materia)
        LEFT JOIN categorie n ON (a.categoria = n.id_categoria) WHERE id_opere = 1
    ovviamente mi interessa la parte in grassetto che mi da errore

  9. #9
    come ti ho già detto, usa DUE alias
    codice:
    ...
    LEFT JOIN editore b1 ON (b1.id_editore = a.editore)
    LEFT JOIN editore b2 ON (b2.id_editore = a.collaboratore_editore)
    ...
    
    il resto della query sistemalo di conseguenza

  10. #10

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.