概述
这是一个非常好的问题。我已经在这里阅读了一些有用的答案,但是也许我可以添加更精确的解释。
只要不查询其他信息,使用GROUP BY语句减少查询结果的数量就很容易。假设您获得了下表“位置”。
--country-- --city--France Lyon
Poland Krakow
France Paris
France Marseille
Italy Milano
现在查询
SELECTcountryFROMlocationsGROUPBYcountry
将导致:
--country--France
Poland
Italy
但是,以下查询
SELECTcountry,cityFROMlocationsGROUPBYcountry
...在MS SQL中引发错误,因为您的计算机如何知道要在“法国”右侧的字段中读取的三个法国城市“里昂”,“巴黎”或“马赛”中的哪个?
为了更正第二个查询,您必须添加此信息。一种实现方法是使用函数MAX()或MIN(),在所有候选项中选择最大值或最小值。MAX()和MIN()不仅适用于数字值,而且还比较字符串值的字母顺序。
SELECTcountry,MAX(city)FROMlocationsGROUPBYcountry
将导致:
--country-- --city--France Paris
Poland Krakow
Italy Milano
要么:
SELECTcountry,MIN(city)FROMlocationsGROUPBYcountry
将导致:
--country-- --city--France Lyon
Poland Krakow
Italy Milano
只要您可以从字母(或数字)顺序的两端选择值,这些函数就是一个很好的解决方案。但是,如果不是这种情况怎么办?让我们假设您需要一个具有特定特征的值,例如以字母“ M”开头。现在事情变得复杂了。
到目前为止,我唯一能找到的解决方案是将整个查询放入一个子查询中,并手动构造它之外的其他列:
SELECTcountrylist.*,(SELECTTOP1cityFROMlocationsWHEREcountry=countrylist.countryANDcitylike'M%')FROM(SELECTcountryFROMlocationsGROUPBYcountry)countrylist
将导致:
--country-- --city--France Marseille
PolandNULLItaly Milano
最后
以上就是热心铅笔为你收集整理的mysql 选择不重复,SQL / mysql-选择不重复/唯一,但返回所有列?的全部内容,希望文章能够帮你解决mysql 选择不重复,SQL / mysql-选择不重复/唯一,但返回所有列?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复