注册 登录
编程论坛 ASP.NET技术论坛

一个SQL语句问题!

fsx 发布于 2008-04-23 20:10, 1895 次点击
有a,b两个表.
a表有两个字段(id,name)id唯一;b表也有两个字段(mainid,pic)mainid有多个相同的值,b表mainid字段值等于a表的id值。
  a表               b表
id  name         mainid   pic
1   张三           1      图片
2   李四           1      文字
3   赵五           2      图片
                   3      图片
我想从a表中得到name的值,从b表中得到pic的值,条件是b表中去掉mainid重复记录,只取一条。
就是b表中去掉mainid相同值的记录,只取其中一条就可以了。并且只取两条记录。
如读取值为:
李四 图片
赵五 图片
请问该如何写SQL语句呢?谢谢了~!

[[it] 本帖最后由 fsx 于 2008-4-23 20:11 编辑 [/it]]
17 回复
#2
fsx2008-04-24 08:44
自己顶一下
#3
残影留香2008-04-24 10:05
sql="select a.id,a.name,b.mainid,b.pic from a,b where a.id=b.mainid order by id desc"
用这个试试,主要的思路是实现多表查询!希望能给你有所帮助!
#4
fsx2008-04-24 10:52
先谢谢了。
但我想读取时去掉b表中mainid重复的记录,取其中一条。
如:mainid 有1,1,2 只取1,2记录就行了。
#5
hebingbing2008-04-24 12:28
select a.name,distinct(b.pic)as pic from a,b where a.id=b.mainid
#6
fsx2008-04-24 16:29
把distinct放在后面,提示“表达式中 'distinct' 函数未定义”
#7
hebingbing2008-04-24 16:53
哦,那样不对,我给你的代码不对……
我疏忽了,b表重复的是mainid不是pic字段,这样的话你可以建立一个临时表……但是由于c#和数据库的连接是断开式连接,所以在用临时表的时候连接是不能关闭的。
所以我觉得最好的办法就是建立一个试图或者存储过程……
但是要是你的pic没有重复的情况的话你试试下面的代码可不可以……
select a.id,a.name,b.mainid,b.pic from a,b where a.id=b.mainid and b.pic in (select distinct(mainid)as id,pic from b)
#8
hebingbing2008-04-24 17:04
select a.id,a.name,mainid=min(b.mainid),b.pic from a,b where a.id=b.mainid order by b.mainid desc
这样应该可以……
你试试吧……
#9
fsx2008-04-24 19:49
仍然不得,提示:"试图执行的查询中不包含作为合计函数一部分的特定表达式 'id' "

还是非常感谢你!
#10
hebingbing2008-04-24 20:12
两个都不行吗?你确定在执行完所有操作前没有关闭数据连接……
#11
fsx2008-04-24 20:16
是啊,关闭了。在页面中只有这个操作而已。其他没有用到数据库。
补充一下:b表也有一个自动编号的id
#12
hebingbing2008-04-24 21:28
你这样试试吧……
select a.name,b.pic from a,b where a.id=b.mainid and b.mainid in (select mainid from b group by mainid)
这样应该就没有问题了,
#13
fsx2008-04-26 09:06
非常感谢你,改为这样就得了。
select top 2 a.name,b.pic from a,b where a.id=b.mainid and b.pic in (select Max(pic) from b group by mainid)
#14
梦心2008-04-26 10:51
在SQL查询语句中限制!!
#15
throwmouse2008-05-27 14:41
把distinct放在select 之后就可以了
#16
2008-05-29 09:57
select a.id,a.name,mainid=min(b.mainid),b.pic from a,b where a.id=b.mainid order by b.mainid desc这样没问题吧
#17
都市虫子2008-05-29 11:36
select a.name,b.pic ,MAX(b.mainid) AS b from a,b where a.id=b.mainid group by a.id
#18
2008-05-30 18:48
1