2009-10-24 6 views
0

J'ai une table, user_quotes, avec les champs quotes_id, quotes_user, quotes_desc, quotes_date, quotes_status et quotes_location. Dans ce quotes_user permet des entrées de duplication. Lorsque j'exécute ma requête, j'essaie d'éviter les entrées de duplication de quotes_user. Alors j'exécuté la requête comme celui-ci,Distinct requête MySQL retourner tous les enregistrements

select distinct quotes_user from user_quotes; 

Cette requête renvoie uniquement le champ quotes_user. Comment puis-je récupérer tous les autres enregistrements en utilisant distinct quotes_user.

J'ai essayé avec ce qui suit,

select distinct quotes_user, quotes_desc, quotes_date, quotes_status from user_quotes; 

Ce n'est pas éviter la duplication des quotes_user.

Si j'utilise,

select distinct quotes_user, * from user_quotes; 

Je reçois erreur mysql,

Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de * * FROM user_quotes.

Comment puis-je récupérer tous les enregistrements en utilisant select distinct d'une seule colonne dans une même table? Je stocke l'adresse e-mail dans le champ. Le type de données est varchar.

Note: s'il vous plaît ne me suggère pas d'autres types comme groupe par ou autre. J'ai besoin de savoir comment je peux récupérer les enregistrements en utilisant seulement distinct.

+0

Voulez-vous récupérer 1 ligne de devis pour chaque utilisateur de citations? Comme la citation la plus récente pour chaque utilisateur, ou le premier, quelque chose comme ça? Ou voulez-vous un nombre de devis ou une valeur de devis moyenne pour chaque utilisateur de devis? –

+0

@Dale Je veux éviter la duplication de quotes_user. peut être le résultat varie en fonction de l'utilisateur quotes_user. Merci. – Paulraj

Répondre

2

En plus de ce qui a déjà été dit, il convient de souligner que le mot-clé DISTINCTne peut pas vous donner des résultats distincts pour une colonne individuelle lorsque vous sélectionnez plusieurs colonnes. Vous obtiendrez lignes distinctes de, dans votre cas, 4 colonnes. Ce que vous observez est le comportement standard attendu de DISTINCT.

+0

ok. Pouvez-vous élaborer avec mon exemple comment puis-je atteindre tous les records en utilisant disitinct de toute autre manière? en utilisant rejoindre comme? – Paulraj

+0

Je ne peux pas vraiment penser de toute façon à réaliser ce que vous voulez en utilisant 'DISTINCT'. Cela peut être fait très facilement avec 'GROUP BY'. Pourquoi êtes-vous si attaché à l'utilisation de DISTINCT? –

+0

oh .. bien. il n'y a aucune raison pour laquelle je cherche cette question distincte. Comme j'ai obtenu le résultat en utilisant GROUP BY, je veux juste savoir comment puis-je obtenir les résultats en utilisant distinct. Si quelqu'un me fournir des liens ou des tutoriels pour apprendre en profondeur à propos de distinct, sera utile pour moi. Merci. – Paulraj

0

Il semble que quotes_user devrait être une clé étrangère comme user_id pour probablement votre table d'utilisateurs. Vous pouvez ensuite interroger user_quotes par user_id en retournant toutes les citations pour cet utilisateur. Votre face avant pourrait bien formater toutes les citations pour chaque utilisateur, cela ne ressemble pas vraiment à un problème MySql.

2

Vous dites que vous voulez récupérer les autres champs, mais vous n'avez pas spécifié comment SQL est de savoir quelles valeurs pour récupérer les autres champs, pour chaque valeur distincte de quotes_user.

Pour vous montrer voulez que je veux dire, considérez cet exemple:

+-------------+---------------+ 
| quotes_user | email_address | 
+-------------+---------------+ 
| user1  | email1  | 
| user1  | email2  | 
| user2  | email3  | 
| user2  | email4  | 
| user2  | email5  | 
| user3  | email6  | 
+-------------+---------------+ 

Maintenant, si vous juste voulu quotes_user, la sortie serait évidemment:

+-------------+ 
| quotes_user | 
+-------------+ 
| user1  | 
| user2  | 
| user3  | 
+-------------+ 

Mais si vous voulez la Dans d'autres champs également, vous devez décider si, par exemple, email1 ou email2 pour la ligne user1.

Peut-être que ce que vous voulez est de concaténer les valeurs des autres champs ensemble. Dans ce cas, je suggère d'utiliser la fonction d'agrégat GROUP_CONCAT avec GROUP BY quotes_user.Cependant, je ne suis pas sûr de vouloir éviter l'utilisation de GROUP BY. Peut-être que si vous pouviez expliquer cela, nous pourrions vous aider davantage.

+0

hey, avez-vous écrit ces tables ascii à la main ou y at-il un outil disponible pour les générer? –

+0

merci pour la réponse. J'ai eu le résultat quand j'ai essayé avec le groupe par. mais de la même manière pourquoi je ne peux pas obtenir les résultats que j'ai essayé avec distinct. comment puis-je obtenir le même résultat, fait en utilisant le groupe par le distinct. – Paulraj

+0

Vous ne pouvez pas. Lisez ma réponse –

Questions connexes