Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746

    [sql] problema con query

    mi sto incasinando

    ho una relazione molti a molti e dovrei selezionare solo

    quegli id_convenzioni che non hanno nessuna relazione nella tabella convenzioni_categorie

    ecco le tabelle:
    codice:
    tabella convenzioni
    - id_convenzioni
    - ...
    
    tabella categorie
    - id_categorie
    - ...
    
    tabella convenzioni_categorie
    - id_associazioni
    - id_elemento_principale (id_convenzioni)
    - id_elemento_secondario (id_categorie)
    codice:
    SELECT id_convenzioni
    FROM   convenzioni
    INNER JOIN convenzioni_categorie
    ON ???
    :master: sto soffrendo di un limite mentale, per cortesia qualcuno saprebbe aiutarmi?
    Errare humanum est, perseverare ovest

  2. #2
    come fai ad avere una relazione molti a molti con una tabella di unione????..

    comunque... la tabella categorie non serve. Devi fare un LEFT JOIN tra la tabella di unione e la tabella convenzioni, per forza di cose la relazione sara' con i campi relazionati. Siccome chiederai TUTTI i record di "convenzioni_categorie" ne conviene che in caso di mancanza di relazione nella tabella "convenzioni" essendo unita tramite un LEFT JOIN, questa presentera' un NULL come campo equivalente. A questo punto nel where metti la condizione "dove il campo e' NULL" ed e' fatta.
    codice:
    SELECT *
    FROM convenzioni_categorie as ca
    INNER JOIN convenzioni as co
    ON co.id_convenzioni = ca.id_elemento_principale
    WHERE co.id_convenzioni IS NULL
    meglio spiegare che far cadere dall'alto...


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

  3. #3
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    scusa se ho formulato male la domanda e grazie per la spiegazione su cui sto ancora pensando, ma la query che mi hai proposto non mi da alcun risultato
    Errare humanum est, perseverare ovest

  4. #4
    Originariamente inviato da carlo2002
    scusa se ho formulato male la domanda e grazie per la spiegazione su cui sto ancora pensando, ma la query che mi hai proposto non mi da alcun risultato
    significa che tutte le id_convenzioni hanno almeno una relazione. Oppure non hai spiegato chiaramente il tuo problema

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

  5. #5
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    cerco di spiegare meglio:

    nella tabella convenzioni devo selezionare tutti i record il cui id non è presente nel campo id_elemento principale della tabella convenzioni_categorie

    sto studiando OUTER JOIN che non ho mai usato ma sembra adatto allo scopo :master:
    Errare humanum est, perseverare ovest

  6. #6
    Originariamente inviato da carlo2002
    cerco di spiegare meglio:

    nella tabella convenzioni devo selezionare tutti i record il cui id non è presente nel campo id_elemento principale della tabella convenzioni_categorie

    sto studiando OUTER JOIN che non ho mai usato ma sembra adatto allo scopo :master:
    ok. studia e poi passaci la soluzione.


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

  7. #7
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    Originariamente inviato da piero.mac
    ok. studia e poi passaci la soluzione.

    la vedo dura
    Errare humanum est, perseverare ovest

  8. #8
    Utente di HTML.it L'avatar di carlo2002
    Registrato dal
    Jun 2002
    Messaggi
    2,746
    sembra che ci siamo :
    codice:
    SELECT *
    FROM convenzioni as co
    LEFT OUTER JOIN convenzioni_categorie as ca
    ON co.id_convenzioni = ca.id_elemento_principale
    WHERE ca.id_elemento_principale IS NULL
    grazie piero, gli input che mi dai sono sempre fruttuosi

    Errare humanum est, perseverare ovest

  9. #9
    OUTER puoi anche ometterlo.

    Nella mia query prima ho fatto un banalissimo errore. prima ti ho descritto uno scenario con LEFT JOIN poi per errore ho scritto INNER JOIN ecco perche' non avevi record....

    ovviamente con INNER JOIN e' una equi-join e non considera le righe "orfane"...

    va be'... capita.


    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.