Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    SQL INNER JOIN ma solo col primo

    Ciao a tutti,
    ho una tabella articoli (tblArticoli) ed una tabella categorie (tblCatProd) e delle relazioni molti a molti, dato che alcuni prodotti possono essere in più categorie. Per cui ho creato una terza tabella (tblCatProdArticoli) in cui ordino il prodotto all'interno della categoria ed al tempo stesso lo associo alla categoria.

    tblArticoli
    ID
    Nome

    tblCatProd
    ID
    Categoria

    tblCatProdArticoli
    ID
    IDCatProd
    IDArticolo
    Ordine

    Se faccio una query in cui mi vengano elencati tutti gli articoli mi vengono elencati due volte quelli che appartengono a due cateogorie.

    SELECT tblArticoli.ID, tblArticoli.Nome
    FROM tblArticoli INNER JOIN tblCatProdArticoli ON tblArticoli.ID = tblCatProdArticoli.IDArticolo
    WHERE tblCatProdArticoli.IDCatProd IN (1, 2, 3, 4, 5, 6, 7, 8)
    ORDER BY tblCatProdArticoli.Ordine ASC

    Esiste un modo per vincolare la INNER JOIN in modo che stabilisca la relazione solo al primo record di questo legame "...ON tblArticoli.ID = tblCatProdArticoli.IDArticolo..."?
    Oppure posso fare altro? Ho provato ad usare DISTINCT ma mi dice che "La cluasola ORDER BY (tblCatProdArticoli.Ordine) é in conflitto con DISTINCT.

    Grazie mille a chi ha già incontrato questo blocco.
    Ciao
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  2. #2
    non so se è la soluzione migliore ma potestri creare una tabella di apppoggio che ti carichi i dati come ti interessa e poi visualizzare quella tabella per effettuare la distinct e l'ordinamento

  3. #3

    Purtroppo no

    Purtroppo no, il problema persiste.
    Il conflitto del DISTINCT con l'ORDER BY sta nel fatto che il campo "Ordine" della "tblCatProdArticoli" non è nella raccolta del SELECT.
    In effetti se l'articolo con ID = 1 è associato sia alla categoria 2 che alla categoria 3 nella tblCatProdArticoli mi trovo con questi record:

    codice:
    ID    IDCatProd    IDArticolo   Ordine
    1     2     1     0
    2     3     1     0
    ...
    3     2     2     1
    4     2     3     1
    ...
    Se faccio questa SELECT:

    SELECT tblArticoli.ID, tblArticoli.Nome
    FROM tblArticoli INNER JOIN tblCatProdArticoli ON tblArticoli.ID = tblCatProdArticoli.IDArticolo
    WHERE tblCatProdArticoli.IDCatProd IN (2, 3)
    ORDER BY tblCatProdArticoli.Ordine ASC

    Mi dà 4 record di risultato per cui due volte l'articolo con ID = 1


    Se invece faccio questa SELECT:

    SELECT DISTINCT tblArticoli.ID, tblArticoli.Nome
    FROM tblArticoli INNER JOIN tblCatProdArticoli ON tblArticoli.ID = tblCatProdArticoli.IDArticolo
    WHERE tblCatProdArticoli.IDCatProd IN (2, 3)
    ORDER BY tblCatProdArticoli.Ordine ASC

    C'è il conflitto e non viene eseguita la query.
    Non so se mi sono spiegato...
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  4. #4

  5. #5
    Originariamente inviato da optime
    che db usi?
    Access.
    Semplificando la mia domanda è se esiste un modo di fare una select del genere:

    SELECT tblArticoli.ID, tblArticoli.Nome
    FROM tblArticoli INNER JOIN tblCatProdArticoli
    ON tblArticoli.ID = (SELECT TOP 1 FROM tblCatProdArticoli WHERE tblCatProdArticoli.IDArticolo = tblArticoli.ID ORDER BY tblCatProdArticoli.Ordine ASC)
    WHERE tblCatProdArticoli.IDCatProd IN (2, 3)
    ORDER BY tblCatProdArticoli.Ordine ASC
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  6. #6
    provala e vedi se funzia, no?

  7. #7
    non funziona ovviamente altrimenti non chiedevo aiuto
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  8. #8
    (SELECT TOP 1 FROM tblCatProdArticoli WHERE tblCatProdArticoli.IDArticolo = tblArticoli.ID ORDER BY tblCatProdArticoli.Ordine ASC)
    select top 1 cosa? ti manca il campo da selecttare
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    SELECT tblArticoli.ID, tblArticoli.Nome
    FROM tblArticoli INNER JOIN tblCatProdArticoli
    ON tblArticoli.ID = (SELECT TOP 1 tblCatProdArticoli.IDArticolo FROM tblCatProdArticoli WHERE tblCatProdArticoli.IDArticolo = tblArticoli.ID ORDER BY tblCatProdArticoli.Ordine ASC)
    WHERE tblCatProdArticoli.IDCatProd IN (2, 3)
    ORDER BY tblCatProdArticoli.Ordine ASC

    Non funziona neppure così...
    Enrico Frison
    El signore ghe da e suche a chi che no ga i porsei!

  10. #10
    frisell, hai detto che se esegui questa query

    SELECT tblArticoli.ID, tblArticoli.Nome
    FROM tblArticoli INNER JOIN tblCatProdArticoli ON tblArticoli.ID = tblCatProdArticoli.IDArticolo
    WHERE tblCatProdArticoli.IDCatProd IN (1, 2, 3, 4, 5, 6, 7, 8)
    ORDER BY tblCatProdArticoli.Ordine ASC

    hai un risultato, ma non è esattamente quello che ti serve. posti per piacere il risultato?

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.