我有一张表可能有大约100条记录左右,并带有一个用户名字段。可能有许多具有相同用户名的记录。我如何确保每个用户名只返回一条记录,无论它是哪条记录?
e.g。对于下表
users
username item firstname lastname
-------------------------------------------------
superhans shoes super hans
jez hat jeremy sisto
jez book jeremy sisto
flinto train fred flintstone
superhans shirt super hans
仅返回以下内容:
username item firstname lastname
-------------------------------------------------
superhans shoes super hans
jez hat jeremy sisto
flinto train fred flintstone
答案 0 :(得分:4)
如果您 希望在结果中返回商品字段,则可以使用DISTINCT:
SELECT DISTINCT username,firstname,lastname FROM users
如果要包含项目字段,则必须执行以下操作:
SELECT t.username,
(SELECT TOP 1 item FROM users WHERE username = t.username) AS item,
t.firstname,
t.lastname
FROM (
SELECT DISTINCT username, item, firstname, lastname
FROM users
) AS t
使用这样的查询没有多大意义。你能更具体地了解一下你想要实现的目标吗?
答案 1 :(得分:3)
在MySQL 5中(你没有提到,但是你已经将这个问题标记为mysql,所以我假设)你可以:
SELECT *
FROM users
GROUP BY username
您将获得每个用户的任意行
MySQL扩展了GROUP BY的使用,以便您可以在SELECT列表中使用未出现在GROUP BY子句中的非聚合列或计算。 [...]如果您从GROUP BY部分省略的列在组中不是常量,请不要使用此功能。服务器可以自由地从组中返回任何值,因此除非所有值都相同,否则结果是不确定的。
实际上,考虑一下,你可能想要做
SELECT username, GROUP_CONCAT(DISTINCT item), whatever
FROM users
GROUP BY username
这将为您提供所有项目的列表。取决于你为什么想要那个任意行。
-----Ñ
答案 2 :(得分:1)
首先,应该构建和维护您的表,以便不会发生此状态。如初。
其次,我认为你想要的是SELECT DISTINCT
。
答案 3 :(得分:0)
SELECT DISTINCT username, item, firstname FROM users
答案 4 :(得分:0)
最好将用户名存储在名为users的表中,并使用名为user_id的唯一ID字段。
然后使用user_id作为foriegn密钥,将数据存储在与用户相关的表格中......例如购买,用户信息等。
答案 5 :(得分:0)
将用户名设为主键 - 这样,您就可以确保唯一性