Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Query che non va

  1. #1

    Query che non va

    Salve,
    vorrei eseguire una query del tipo:

    SELECT AnDenominazione, IDVolume, VolTitolo, VolPrestabile, VolDisponibile, VolPrenotato, BibNome
    FROM tblanagrafica AS a, tblvolumi AS v, tblbiblio AS b
    LEFT JOIN tblanagrafica ON ( a.IDAnagrafica = v.VolIDAutore )
    LEFT JOIN tblbiblio ON ( b.IDBiblio = v.VolIDBiblio )

    sicuramente è errata...la query originale era

    SELECT AnDenominazione, IDVolume, VolTitolo, VolPrestabile, VolDisponibile, VolPrenotato, BibNome
    FROM tblanagrafica AS a, tblvolumi AS v, tblbiblio AS b
    where( a.IDAnagrafica = v.VolIDAutore ) and
    ( b.IDBiblio = v.VolIDBiblio )

    avete qualche idea?
    Ah non ricordo la differenza tra right e left...???

    Grazie
    .::C A R P E ^-^ D I E M ::.

  2. #2
    Utente di HTML.it L'avatar di Emyl
    Registrato dal
    Jul 2004
    Messaggi
    250
    Nel tuo caso vuoi fare una INNER JOIN, quindi ne' LEFT ne' RIGHT.

    Semplicemente togli la parola LEFT, il resto e' ok.
    "Ci sono 10 tipi di persone, quelli che capiscono i numeri binari...
    e quelli che non li capiscono."

  3. #3
    ok...ma in una query si possono inserire piu left join?

    nel mio caso se ci sono i campi:
    v.VolIDAutore=0(zero)
    v.VolIDBiblio=0(zero)
    io vorrei che mi restituisca i record della tabella 'tblvolumi' che presentano quei 2 campi con valore zero cosa che non sarebbe possibile con una inner join.
    .::C A R P E ^-^ D I E M ::.

  4. #4
    Originariamente inviato da Anthony81
    ok...ma in una query si possono inserire piu left join?

    nel mio caso se ci sono i campi:
    v.VolIDAutore=0(zero)
    v.VolIDBiblio=0(zero)
    io vorrei che mi restituisca i record della tabella 'tblvolumi' che presentano quei 2 campi con valore zero cosa che non sarebbe possibile con una inner join.
    esatto. devi usare il LEFT oppure il RIGHT JOIN.

    La tabella che descrivi per prima nel FROM assume la valenza di tabella di SX (LEFT) l'altra e' la tabella di DX (RIGHT). Quindi LEFT JOIN o RIGHT JOIN leggera' tutti i record della tabella posizionata left o right.

    Puoi anche mischiare LEFT e RIGHT con JOIN diverse. Nel tuo caso la tabella con alias "v" dovrebbe essere la tabella LEFT, cioe' quella decritta nel FROM. Questa tabella rendera' tutti i record che rispondo alla richiesta WHERE, mentre la tabella di DX in mancanza di equi-join cioe' della richiesta di uguaglianza descritta in ON, rendera' NULL. Oppure il tutto potrebbe essere rovesciato cambiando il LEFT con RIGHT JOIN.

    Quindi tu potrai trovare i dati della tabella di SX senza corrispondenza nella tabella di DX mettendo nella condizione: WHERE tabella_dx.campo IS NULL.

    In pratica selezionando tutti i record dove quella tabella.campo e' NULLO trovi di conseguenza tutti i record dell'altra tabella dove il dato invece e' presente.

    molto piu' difficile da spiegare che da fare.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    scusami...
    ma se dovessi modificare la query che ti ho indicato?
    potresti modificarla tu?

    Grazie
    .::C A R P E ^-^ D I E M ::.

  6. #6
    Originariamente inviato da Anthony81
    scusami...
    ma se dovessi modificare la query che ti ho indicato?
    potresti modificarla tu?

    Grazie
    Potrei ma non conosco il contenuto delle tabelle.
    ti ho indicato la via. Ti posso fare un esempio generico:
    codice:
    SELECT *
    FROM tab1 a           -- questa tabella e' la SX
    LEFT JOIN tab2 b      -- questa e' la tabella di DX della relazione
    ON b.pippo = a.pippo  -- equi-join
    LEFT JOIN tab3 c      -- questa e' la tabella di dx della relazione
    ON c.pallino  = a.pallino
    WHERE
    c.pallino IS NULL
    AND
    b.pippo IS NULL
    AND
    a.pippo = '$pippo';
    In questo caso ti rendera' tutti i record della tabella "a" dove a.pippo e' = a $pippo e non ci sono riferimenti nella tabella b.pippo e c.pallino.

    Devi mettere in FROM la tabella di unione che ha tutti i record. Si presume che alcune delle tabelle siano autonome, cioe' possono esistere senza riferimenti (rif. uno), mentre la tabella di unione (rif. molti) non puo' esistere senza il riferimento alle altre tabelle.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.