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

    [MySql] - consiglio per scrittura query

    Ciao a tutti, vi scrivo qui di seguito la mia idea di tabelle per gestire dei: fascicoli, etichette e registro

    un fascicolo può avere enne etichette, una etichetta può essere applicata ad enne fascicoli, può essere applicata ad un registro

    "fascicoli"
    idFascicolo
    fascicolo

    "etichette"
    idEtichetta
    etichetta

    "fascicoli_etichette"
    id
    idFascicolo FK fascicoli.idFascicolo
    idEtichetta FK etichette.idEtichetta

    "registri"
    idRegistro
    numero
    anno
    idFascicolo FK fascicoli.idFascicolo
    idEtichetta FK etichette.idEtichetta


    che query posso scrivere per trovare tutte le etichette applicate ad un "idFascicolo" (quindi record sia su "registri" che su "fascicoli_etichette")?

    ho provato con

    SELECT fascicoli.idFascicolo,
    registri.*,
    e.etichetta AS etichettaSingola,
    er.etichetta AS etichettaRegistro
    FROM fascicoli
    LEFT JOIN registri ON (registri.idFascicolo = fascicoli.idFascicolo)
    JOIN etichette AS er ON (er.idEtichetta = registri.idEtichetta)
    LEFT JOIN fascicoli_etichette ON (fascicoli_etichette.idFascicolo = fascicoli.idFascicolo)
    JOIN etichette AS e ON (e.idEtichetta = fascicoli_etichette.idEtichetta)
    WHERE fascicoli.idFascicolo='idDelFascicoloCheStoCercand o'

    ma non ottengo un risultato corretto (se ho 2 record in "fascicoli_etichette" e 1 record in "registri" con la query sopra, ottengo 2 righe e non 3)

    Grazie a tutti per l'aiuto

    EDIT: aggiungo dei dati per esempio.

    "fascicoli"
    1,nomeFascicolo1


    "etichette"
    1, nomeEtichetta1
    2, nomeEtichetta2
    3, nomeEtichetta3

    "fascicoli_etichette"
    1,1,1
    1,1,3

    "registri"
    1,152,2019,1,2

    Come risultato della query vorrei peter avere 3 righe, una per ogni idEtichetta utlizzata
    Ultima modifica di aquatimer2000; 15-02-2019 a 01:56
    aquatimer2000

  2. #2
    credo che più che due join nella stessa query tu debba fare una union tra due join singole

  3. #3
    Quote Originariamente inviata da optime Visualizza il messaggio
    credo che più che due join nella stessa query tu debba fare una union tra due join singole
    puoi farmi un esempio?
    aquatimer2000

  4. #4
    SELECT elenco campi FROM tab1 JOIN tab2 on bla bla bla
    UNION
    SELECT stesso elenco campi FROM tab1 JOIN tab3 on bla bla bla

  5. #5
    sono un
    grazie mille!
    aquatimer2000

  6. #6

  7. #7
    Quote Originariamente inviata da aquatimer2000 Visualizza il messaggio
    Ciao a tutti,

    ....

    "fascicoli_etichette"
    id
    idFascicolo FK fascicoli.idFascicolo
    idEtichetta FK etichette.idEtichetta

    "registri"
    idRegistro
    numero
    anno
    idFascicolo FK fascicoli.idFascicolo
    idEtichetta FK etichette.idEtichetta
    ...
    che query posso scrivere per trovare tutte le etichette applicate ad un "idFascicolo" (quindi record sia su "registri" che su "fascicoli_etichette")?
    Non mi è chiaro se ha senso o meno,
    ...ma non puoi sostituire i due campi di "Registri" : idFascicolo ed idEtichetta
    con un id_fascicoli_etichette FK fascicoli_etichette.Id
    ?

  8. #8
    Quote Originariamente inviata da optime Visualizza il messaggio
    poi posta la soluzione
    buongiorno a tutti, ho avuto modo di metterci mano adesso, ed ho scritto questo che segue:

    SELECT
    fascicoli.idFascicolo,
    etichette.idEtichetta,
    etichette.etichetta,
    fascicoli_etichette.idFascicolo
    FROM fascicoli
    JOIN fascicoli_etichette ON (fascicoli_etichette.idFascicolo = fascicoli.idFascicolo)
    JOIN etichette ON (etichette.idEtichetta = fascicoli_etichette.idEtichetta)


    UNION


    SELECT
    fascicoli.idFascicolo,
    etichette.idEtichetta,
    etichette.etichetta
    registri.idFascicolo
    FROM fascicoli
    JOIN registri ON (registri.idFascicolo = fascicoli.idFascicolo)
    JOIN etichette ON (etichette.idEtichetta = registri.idEtichetta)


    WHERE fascicoli.idFascicolo='idFascicolo_che_ho_scelto'
    aquatimer2000

  9. #9
    SELECT
    fascicoli.idFascicolo,
    etichette.idEtichetta,
    etichette.etichetta,
    fascicoli_etichette.idFascicolo
    FROM fascicoli
    JOIN fascicoli_etichette ON (fascicoli_etichette.idFascicolo = fascicoli.idFascicolo)
    JOIN etichette ON (etichette.idEtichetta = fascicoli_etichette.idEtichetta)
    WHERE fascicoli.idFascicolo='idFascicolo_che_ho_scelto'


    UNION


    SELECT
    fascicoli.idFascicolo,
    etichette.idEtichetta,
    etichette.etichetta,
    registri.idFascicolo
    FROM fascicoli
    JOIN registri ON (registri.idFascicolo = fascicoli.idFascicolo)
    JOIN etichette ON (etichette.idEtichetta = registri.idEtichetta)
    WHERE fascicoli.idFascicolo='idFascicolo_che_ho_scelto'

    EDIT: provo e vi aggiorno!
    EDIT 2: mancava una virgola tra i campi selezionati, ora funziona.
    Ultima modifica di aquatimer2000; 18-02-2019 a 17:08
    aquatimer2000

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 © 2019 vBulletin Solutions, Inc. All rights reserved.