Chinaunix

标题: 求一个简单的mysql语句 [打印本页]

作者: tomorrow819    时间: 2009-09-30 14:32
标题: 求一个简单的mysql语句
我对mysql不是很熟悉,大概的需求如下:

有多行数据。类似下面的表:

id                 class                     name
1                    2                         a
2                    3                         b
3                    2                         c
4                    2                         d

其中id为1,3,4的class是相同的,取这个表的所有数据时class相同时只取ID最小的,也就是说查询这个表时最后取出来的数据为id为1和2的,id为3和4的忽略。请问这个sql怎么写,谢谢了!

[ 本帖最后由 tomorrow819 于 2009-9-30 14:43 编辑 ]
作者: lucash    时间: 2009-09-30 14:32
select * from test where id in (select id from (select class,min(id) id from test group by class)b);
作者: tomorrow819    时间: 2009-09-30 14:55
谢谢,可是有语法错误
作者: cenalulu    时间: 2009-09-30 14:59
select min(id),class,name from table_name group by class;
作者: tomorrow819    时间: 2009-09-30 15:05
原帖由 cenalulu 于 2009-9-30 14:59 发表
select min(id),class,name from table_name group by class;


我有很多列,30多列吧,要取出所有的列,并且某些列名可能会变的,要用select *, 您给的例子是取出固定的列。
作者: tomorrow819    时间: 2009-09-30 15:13
呵呵,综合了楼上两家的,用下面的sql搞定:
select * from table_name where id in (select min(id) from table_name group by class)
作者: tomorrow819    时间: 2009-09-30 15:13
我不知道把分给谁好啊,好像不能一人给一点哦
作者: cenalulu    时间: 2009-09-30 15:15
原帖由 tomorrow819 于 2009-9-30 15:05 发表


我有很多列,30多列吧,要取出所有的列,并且某些列名可能会变的,要用select *, 您给的例子是取出固定的列。


一开始干吗不说。。。

你的id是主键吧?
select * from table_name tn join (select min(id) as mid from table_name group by class) tn2 on tn.id=tn2.mid;
作者: hb_li_520    时间: 2009-09-30 15:31
分应该给:
cenalulu  

作者: lucash    时间: 2009-09-30 15:47
如何退分?
作者: lucash    时间: 2009-09-30 15:48
标题: 回复 #3 tomorrow819 的帖子
我这里没有语法错误阿?你的什么版本?
作者: lucash    时间: 2009-09-30 16:00
mysql> select * from test;
+------+-------+------+
| id   | class | name |
+------+-------+------+
|    1 | AAA   | ccc  |
|    2 | BBB   | mmm  |
|    3 | AAA   | kkk  |
|    4 | AAA   | iii  |
+------+-------+------+

mysql> select * from test where id in (select id from (select class,min(id) id from test group by class)b);
+------+-------+------+
| id   | class | name |
+------+-------+------+
|    1 | AAA   | ccc  |
|    2 | BBB   | mmm  |
+------+-------+------+

mysql> select version();
+------------------+
| version()        |
+------------------+
| 5.1.32-debug-log |
+------------------+
作者: cenalulu    时间: 2009-09-30 16:01
原帖由 hb_li_520 于 2009-9-30 15:31 发表
分应该给:
cenalulu  


帮助中学习么~~分是其次
作者: lucash    时间: 2009-09-30 16:10
我一直以为使用了
group by col_name的话,这个col_name必须出现在select 后面,而且必须在第一位,
看了各位的,才发现不一定。

学习一下。

呵呵,开始看到的时候点消息的时候,点了一下就F5了,在我的几分收益记录里好像不能再退了。。
这5分就算是给我的一点小小的鼓励吧。

不好意思。
作者: 风远尘    时间: 2009-10-01 23:03
我这个sql语句似乎能达到你的效果。

select * from test group by class order by id asc;

但没有测试过效率问题
表面看应该比前面那些语句要高一些




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2