Cercare i record omogenei in una tabella di relazione

di ZioCrick il
12 risposte

Buongiorno,
ho una domanda:
Avendo una relazione molti a molti tra due tabelle MySql Tab1 e Tab2 ho anche una tabella di relazione che contiene i puntatori Id1 e Id2 alle due tabelle Tab1 e Tab2.
Quindi faccio un esempio: se nella tabella della relazione ho i seguenti record:
Id1  1 1 2 3 4 5 6 6 7 7 8 9
Id2  4 8 5 4 6 4 4 2 4 8 3 4
esiste un modo tramite una query MySql di ricavare i record che hanno Id1 che punta contemporaneamente a Id2 = 4 e 8 ?
In pratica dovrei ottenere i recod con Id1 = 1 e 7

Grazie per qualsiasi indicazione.

12 Risposte

  • Una m a m è la combinazione di due 1.a.m una da tabella 1.(Lato 1) Verso la tabella 2 (lato molti) e il rovescio della medaglia una 1.a.m da tabella 2.(Lato 1) Verso tabella 1 (lato molti)

    Cosa vuoi fare esattamente?

    Supponendo che tab1 e tab2 siano totalmente diverse e lato molti hai

    17/09/2026 - ZioCrick ha scritto:

    Id1  1 1 2 3 4 5 6 6 7 7 8 9
    Id2  4 8 5 4 6 4 4 2 4 8 3 4

    Questa relazione.la vedi nella tabella.intermedia.

    17/09/2026 - ZioCrick ha scritto:

    esiste un modo tramite una query MySql di ricavare i record che hanno Id1 che punta contemporaneamente a Id2 = 4 e 8 ?

    Che significa id1? Il.record con id valorizzato a 1?

    Select * form intermedia vhere id1=1 and (id2=4 or id2=8)

    Considera che sono singoli record.

    Troverai un solo id1=1 e.id2=4 

    Altrimenti hai un duplicato.

    E un solo id1=1 e.id2=8.

    Quindi questo:

    Id1  1 1 2 3 4 5 6 6 7 7 8 9

    Non può esistere

    Esiste questo:

    Id1  1 2 3 4 5 6 7  8 9

    Lato id2

    Id2  4 8 5 6 2 3 

    Spiega cosa devi fare esattamente, magari non c'entra nulla lavorare con gli id.

  • Grazie Andrea per il tuo interessamento.

    Chiedo scusa ma mi sono spiegato male.

    Faccio un esempio inventato. 
    Supponiamo di avere la Tb1 che contiene dei nomi di persone e la Tb2 che contiene dei titoli di libri.

    Io vorrei ricavare quali persone hanno letto un certo insieme di libri.

    Quindi relativamente alle tabelle di cui sopra, se voglio sapere le persone che hanno letto i libri con Id2 = 4 e 8 ricaverò le persone associate agli Id1 1 e 7,

    Esiste un modo per ottenere ciò con una sola query?

  • SELECT t1.*
    FROM Tab1 t1
    JOIN Relazione r ON r.Id1 = t1.Id
    WHERE r.Id2 IN (4, 8)
    GROUP BY t1.Id
    HAVING COUNT(DISTINCT r.Id2) = 2;

    HAVING deve corrispondere al numero di libri richiesti.

    se fai 

    WHERE r.Id2 IN (4, 8, 10)

    allora

    HAVING COUNT(DISTINCT r.Id2) = 3;
  • Grande Andrea!!! Sei un mito! :-))

    Ho fatto un paio di prove e funziona alla grande! 

    Oltre a risolvere il mio problema ho imparato qualcosa che non sapevo sulle query MySql!

    Grazie per la tua disponibilità e cortesia!
    Pizza pagata! ;-)

  • Pizza? Quanti pallet ne vuoi?

  • 18/09/2026 - sihsandrea ha scritto:

    Pizza? Quanti pallet ne vuoi?

    Perché, hai una pizzeria? :-))

    Di fatto è un modo di dire che uso perchè mi piacerebbe tanto incontrare di persona chi mi aiuta a risolvere problemi di programmazione o sistemistica e magari potergli offrire una pizza.

    Il problema è che fin'ora nei casi in cui ci siamo scritti in privato le distanze erano troppe.

    Sarebbe bello anche fare dei raduni tra partecipanti ad un forum come questo. :-)

    Se ti va mandami un messaggio privato così verifichiamo la fattibilità di un incontro. ;-)

  • Produzione.alimenti senza glutine a marchio proprio e conto terzi. Gestisco la tracciabilità lotti.

    Prodotti ambient e surgelato.

  • 19/09/2026 - sihsandrea ha scritto:

    Produzione.alimenti senza glutine a marchio proprio e conto terzi. Gestisco la tracciabilità lotti.

    Prodotti ambient e surgelato.

    Ah bravo! 

    Ma in che città sei?

  • 19/09/2026 - ZioCrick ha scritto:

    Se ti va mandami un messaggio privato così verifichiamo la fattibilità di un incontro. ;-)

    Il forum non c'è l'ha la messaggistica privata, ad oggi supporta solo le discussioni pubbliche 

  • 19/09/2026 - Toki ha scritto:

    Il forum non c'è l'ha la messaggistica privata, ad oggi supporta solo le discussioni pubbliche 

    Grazie Toki per l'informazione. :-)

    Scusa se te lo chiedo, non voglio disturbare ma è solo per capire.
    Allora per farsi contattare da qualche membro del forum come si puo fare?
    Potrei scrivere un messaggio con un indirizzo mail oppure un mio sito in cui si puo' trovare un'indirizzo mail?

    Io quando sviluppavo software per professione frequentavo parecchi forum tecnici e c'era la possibilità di inserire un link ad un sito nel piè di pagina che conpariva sotto i messaggi, ma qui non lo trovo.
    Sono io che con l'età sono rincitrullito o non c'è proprio? ;-)

    Update: Forse l'ho trovato. Lo posso mettere nel testo che compare nel mio link forumer?

  • Ciao,

    il link al tuo sito lo hai già inserito nella pagina collegata al tuo nick: https://www.iprogrammatori.it/forum-programmazione/member25369.html

    Nei post non è più presente il footer fisso con i link personali visto che c'è la pagina forumer. Non lasciare indirizzi email altrimenti in vari bot di spammer che scansionano le pagine web lo collezionano. Di base comunque l'editor non te la fa inserire per tua protezione. 

  • 19/09/2026 - Toki ha scritto:

    Ciao,

    il link al tuo sito lo hai già inserito nella pagina collegata al tuo nick: https://www.iprogrammatori.it/forum-programmazione/member25369.html

    Si ce l'ho messo appena dopo aver scritto l'ultimo messaggio perché indagando meglio avevo trovato l'opzione. ;-)

    Nei post non è più presente il footer fisso con i link personali visto che c'è la pagina forumer. Non lasciare indirizzi email altrimenti in vari bot di spammer che scansionano le pagine web lo collezionano. Di base comunque l'editor non te la fa inserire per tua protezione. 

    Grazie mille per i chiarimenti. 

Devi accedere o registrarti per scrivere nel forum
12 risposte