开发者

Distinct MySQL query returning all records

I have a table, user_quotes, with the fields quotes_id, quotes_user, quotes_desc, quotes_date, quotes_status, and quotes_location. In thi开发者_C百科s quotes_user allows duplication entries. When I execute my query I am trying to avoid duplication entries of quotes_user. So I executed the query like this,

select distinct quotes_user from user_quotes;

This query returns only the quotes_user field. How can I retrieve all other records using distinct quotes_user.

I have tried with these following,

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

It's not avoiding the duplication of quotes_user.

If I use,

select distinct quotes_user, * from user_quotes;

I am getting mysql error,

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM user_quotes.

How can I fetch all records using select distinct of a single column in a same table? I am storing the email address in the field. The datatype is varchar.

Note: please don't suggest me other types like group by or other. I need to know how I can retrieve the records by only using distinct.


In addition to what has already been said, it should be stressed that the DISTINCT keyword can't give you distinct results for an individual column when you're selecting multiple columns. You will get distinct rows of, in your case, 4 columns. What you're observing is the expected, standard behaviour of DISTINCT.


You say you want to retrieve the other fields, but you haven't specified how SQL is to know which values to retrieve for the other fields, for each distinct value of quotes_user.

To show you want I mean, consider this example:

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

Now, if you just wanted quotes_user, the output would obviously be:

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

But if you wanted the other fields as well, you'd need to decide whether, for example, to have email1 or email2 for the user1 row.

Perhaps what you want is to concatenate the values of the other fields together. In that case, I would suggest using the GROUP_CONCAT aggregate function with GROUP BY quotes_user.

I'm not sure why you want to avoid using GROUP BY, though. Perhaps if you could explain that, we could help more.


It sounds like quotes_user should be a foreign key like user_id to presumably your users table. You could then query user_quotes by user_id returning all the quotes for that user. Your front end could then format all the quotes for each user nicely, it doesn't really sound like a MySql issue.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜