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

    [MySQL] Select distinct

    Ciao a tutti, ho uno strano problema con MySQL 4.1;

    Eseguendo la seguente query:
    SELECT domains.dom_id,domains.name FROM domains,applications WHERE applications.dom_id=domains.dom_id ORDER BY name ASC;

    Ottengo questo risultato:
    +--------+-----------------+
    | dom_id | name |
    +--------+-----------------+
    | 3 | DNA studies |
    | 3 | DNA studies |
    | 6 | Microbiology |
    | 4 | Protein studies |
    +--------+-----------------+
    4 rows in set (0.02 sec)

    Mi pare che il risultato ottenuto sia quello di una SELECT DISCTINCT: com'e' possibile???


  2. #2
    mi pare che i primi due risultati escludano una condizione distinct...

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

  3. #3
    Forse non mi sono spiegato...

    Ottengo una tabella con 4 record, due dei quali coincidono... ma come e' possibile? Quelli coincidenti non dovrebbero collassare in un record solo? Le tabelle non dovrebbero essere come gli insiemi in SQL?


  4. #4
    [supersaibal]Originariamente inviato da superpelo
    Forse non mi sono spiegato...

    Ottengo una tabella con 4 record, due dei quali coincidono... ma come e' possibile? Quelli coincidenti non dovrebbero collassare in un record solo? Le tabelle non dovrebbero essere come gli insiemi in SQL?

    [/supersaibal]
    No, perche' mai....

    WHERE applications.dom_id=domains.dom_id

    tu chiedi "tutte" le corrispondenze. Dovresti usare il group by.

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

  5. #5
    ah... quindi mi stai dicendo che se ho due record uguali identici vengono proiettati entrambi...

    Nella teoria di SQL ricordo che due record uguali non vengono riportati... altrimenti dovrei usare select distinct...

    Sto dicendo una stupidata?


  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    [supersaibal]Originariamente inviato da piero.mac
    No, perche' mai....

    WHERE applications.dom_id=domains.dom_id

    tu chiedi "tutte" le corrispondenze. Dovresti usare il group by. [/supersaibal]
    o il distinct !!!!

  7. #7
    AH.. ok, la mia memoria mi ha fatto un brutto scherzo... ho confuso distinct col suo contrario...

    ora tutto ok. Grazie ragazzi!


  8. #8
    [supersaibal]Originariamente inviato da superpelo
    ah... quindi mi stai dicendo che se ho due record uguali identici vengono proiettati entrambi...

    Nella teoria di SQL ricordo che due record uguali non vengono riportati... altrimenti dovrei usare select distinct...

    Sto dicendo una stupidata?

    [/supersaibal]
    lo hai detto tu.

    tieni presente che group by oppure distinct si fermano alla prima occorrenza che soddisfa la richiesta. Quindi non e' detto che ti rendano il record che ti potresti aspettare, ma ti rendono il primo che trovano.

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

  9. #9
    Ciao! Ho un grosso problema con una query che fa appunto uso di GROUP BY perchè mi restituisce il primo record che trova e non quello che specifico io nell'ORDER BY priorita
    Premetto che 'priorita' è tinyint(2)

    Praticamente se ho 10 record con priorita=0 e uno solo con priorita=1 e nella query dico

    SELECT * FROM prodotti WHERE subcat='1' GROUP BY nome ORDER BY nome, priorita DESC

    teoricamente mi dovrebbe tirare fuori solo il campo che ha priorità=1 xkè ho messo ORDER BY priorita DESC e invece me ne mostra uno a caso

    Come posso risolvere, magari non usando il GROUP BY?
    Occhiali da Sole www.OtticaGold.it
    Marche: Diesel, Dior, Emporio Armani, Gucci, Oakley, Oxydo, Police, Ray-Ban, Roberto Cavalli, Valentino, Vogue - Per le altre... cerca su google.it

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai messo nome prima di priorità nell'order by. Quindi se Caio ha la priorita 5 comparirà per primo anche se Tizio ha la priorità 1.

    Comunque nel tuo caso sarebbe più semplice scrivere :

    SELECT * FROM prodotti WHERE subcat='1' ORDER BY priorita DESC limit 0,1

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.