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

    [SQL] tabella di collegamento

    Ammettiamo di avere un DB con questa struttura e dati:

    codice:
    Tabella 'channel'
    ---------------
    | id_channel  |
    ---------------
    | 7                 |
    | 17               |
    ---------------
    
    Tabella 'gruppi'
    -------------
    | id_gruppo |
    -------------
    | 1              |
    | 2              |
    -------------
    
    Tabella 'channel_gruppi'
    ----------------------------
    | id_channel  | id_gruppo |
    ----------------------------
    | 7                 | 1               |
    | 7                 | 2               |
    | 17               | 2               |
    ----------------------------
    in pratica tra la tabella 'channel' e quella 'gruppi' vi è una relazione molti a molti, per cui vengono messe in relazione tramite una tabella di collegamento che contiene gli abbinamenti tra i channel e i gruppi.

    da un id_gruppo per estrarre gli id_channel associati uso questa query:
    codice:
    SELECT channel.id_channel FROM channel, gruppi, channel_gruppi 
    WHERE channel.id_channel=channel_gruppi.id_channel AND
    channel_gruppi.id_gruppo=gruppi.id_gruppo AND 
    gruppi.id_gruppo=$identificativo_gruppo
    funziona a dovere. Il problema nasce quando devo fare i contrario, cioè quando devo trovare gli id_channel *NON* associati ad un gruppo. Ad esempio (vedi sopra) ottenere l'id_channel NON associato al gruppo 1 e dovrei ottenere l'id_channel 17, oppure ottenere gli id_channel NON associati al gruppo 2 e dovrei ottenere nessun record.

    Ovviamente farlo con più query è facile ma vorrei riuscirci con una sola.

    E' possibile?
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    prova con:
    codice:
    SELECT *
    FROM channel_gruppi
    WHERE id_channel NOT IN (SELECT id_channel
    FROM channel_gruppi AS tcg
    WHERE tcg.id_gruppo = 1)
    think simple think ringo

  3. #3
    Purtroppo mi ero dimenticato di dire che devo lavorare su MySQL 3.23 e 4.0 che non sono compatibili con le query annidate, per cui quella strada non è percorribile.

    Grazie.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

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.