Visualizzazione dei risultati da 1 a 8 su 8

Discussione: query SQL

  1. #1

    query SQL

    Si stò impazzendo su una query che probabilmente è una cazzata..

    Allora ho una serie di record del tipo

    id_contenuto id_associazione
    50 23
    50 56
    301 179
    301 122
    301 45
    301 23
    3 178
    3 222

    Devo fare una query che seleziona l'id_contenuto che è associato (per esempio) a id_associazione 179 e id_associazione 122

    ho provato

    SELECT DISTINCT c.* FROM contenuti c, associazioni a WHERE c.id_contenuto = a.id_contenuto AND a.id_associazione = 179 AND a.id_associazione = 122


    Dovrebbe venire fuori il singolo ID_CONTENUTO 301

    Spero di essere stato chiaro, grazie!

    Tnx

  2. #2
    non direi sia fattibile...

    ti manca una relazione tra le due tabelle. Poi chiedi una cosa impossibile:

    WHERE
    c.id_contenuto = a.id_contenuto
    AND a.id_associazione = 179
    AND a.id_associazione = 122

    e' assolutamente impossibile che la AND risponda con TRUE.

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

  3. #3
    infatti.. dici che non si può risolvere con 1 singola query?

    Esiste 1funz che è il contrario di IN() ??

    ciò i miei dubbi..

  4. #4
    NOT IN()

    il problema e' che le due tabelle non sono referenziate tra di loro. Sono due tabelle indipendenti.... Referenziare significa che una delle due tabelle contiene un identificativo di un record dell'altra.

    In questo caso sarebbe fattibile con un LEFT JOIN.
    codice:
    from tab_a a
    left join tab_b b ON a.id_contenuto = b.id_contenuto 
    where
    a.id_associazione = 179 
    OR a.id_associazione = 122
    ma deve esistere l'uguaglianza tra i due id_contenuto. forse l'hai omessa, ma non mi pare di vederla nel tuo post.



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

  5. #5
    "Dati due id_associazione x e y, seleziona UNICAMENTE l'id_contenuto che ha id_associazione = x e id_associazione = y"

    Non serve una referenza con un'altra tabella, ossia mi serve per prendere il TITOLO di quel contenuto che stà apputno in un'altra tabella ma non è essenziale per risolvere il problema.

    facendo IN(x,y) seleziona i records che hanno id_associazione = x OPPURE id_associazione = y MENTRE a me serve selezionare i records che hanno id_associazione = x E id_associazione = y.

    Spero di essere stato + chiaro, scusate ma stò leggermente stressato!

    p.s. In pratica stò facendo un mini cms in cui tengo in una tabella le relazione tra contenuti e metadata, all'atto pratico mi serve estrapolare i contenuti che possiedono due o più id_metadata (id_associazione) all'interno di questa tabella.

    Tnx

  6. #6
    usa OR.

    Non puoi mettere in AND il valore di due record dello stesso campo.

    oppure UNION.

    select pippo from tabella
    where id = 30
    union
    select pippo from tabella
    where id = 40

    che poi equivale a scrivere

    select pippo from tabella
    where id = 30 OR id = 40


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

  7. #7
    come non detto..

  8. #8
    Sono riuscito a trovare la soluzione al mio problema usando HAVING

    SELECT c.* FROM contenuti c, metadata_contenuti mc WHERE c.id_contenuto = mc.id_contenuto AND mc.id_metadata IN(30,175,154) GROUP BY mc.id_contenuto HAVING count(1)=2

    bye

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.