sql distinct 查询多列
表TA:
ID | int | 主键 |
code | string | |
value | string | |
desc | string | |
date | string |
表TB:
ID | int | |
code | string | |
value | string | |
desc | string | |
date | string |
表TA记录
ID CODE VALUE DESC DATE
1 001 11 ... ...
2 001 12 ... ...
3 002 13 ... ...
4 003 14 ... ...
5 001 11 ... ...
表TB记录
ID CODE VALUE DESC DATE
1 001 11 ... ...
1 001 12 ... ...
3 002 13 ... ...
2 003 14 ... ...
5 001 11 ... ...
一.需求:
首选要求是 ,查询出所有列(ID ,CODE , VALUE,DESC ,DATE)的值,并且 列CODE 与VALUE联合唯一(相当联合主键),
以上面两个表查询最张的结果为:
ID CODE VALUE DESC DATE
... 001 11 ... ...
... 001 12 ... ...
... 002 13 ... ...
... 003 14 ... ...
所以 select distinct ID , CODE , VALUE , DESC , DATE from table 就不能适应要求了。
因此可以采用group by 来实现。
二 实现:
1.对于表TA中存在主键id,所以可利用主键id来查询:
select ID , CODE , VALUE , DESC , DATE form TA where ID in (select min(ID) from TA group by CODE , VALUE) ;
2.对于表TB中,表不存在主键,则查询方式为:
select min(ID) ID, CODE , VALUE , min(DESC) DESC ,min( DATE) DATE from TA group by CODE , VALUE ;
总结:
方式1一般都适用 于单表的查询,因为一般建表的时候都会建主键;对于视图,联查的时候,方式一可能就不合适了,就可以用方式2