日期:2014-05-17  浏览次数:20546 次

100求解一sql 语句
信息表:A
字段:ID,GID,thisName
记录表:B
字段:ID,GID,UserID,Prices,Dates,IP
关联字段:GID
A跟B表是1对多关系,也就是B有多条记录,我想要查询结果是所有记录表,但UserID不能重复,也就是说UserID有重复的记录只需读一条就可以了,使用group by吧。
求解,谢谢。。。。

------解决方案--------------------
见贴http://bbs.csdn.net/topics/300067856
应该和你的要求类似。


引用:
信息表:A
字段:ID,GID,thisName
记录表:B
字段:ID,GID,UserID,Prices,Dates,IP
关联字段:GID
A跟B表是1对多关系,也就是B有多条记录,我想要查询结果是所有记录表,但UserID不能重复,也就是说UserID有重复的记录只需读一条就可以了,使用group by吧。
求解,谢谢。。。。

------解决方案--------------------

--查询临时表B,按GID,UserID分类,取记录的最大的ID
select max(ID) from #B group by GID,UserID

--如果想查表B所有信息,那么就这样
select * from #B 
where ID in(
select max(ID) from #B group by GID,UserID
)
--如果想联合查询表A,表B,Join on就可以了,这个不用写了吧

------解决方案--------------------

CREATE TABLE A(
id int,
GID nvarchar(20),
thisName nvarchar(20)
)
CREATE TABLE b(
id int,
GID nvarchar(20),
UserID int
)

INSERT INTO A(id,GID,thisName)
SELECT 1,'A1','张三' UNION ALL
SELECT 2,'A2','李四'

INSERT INTO b(id,GID,UserID)
SELECT 1,'A1',2 UNION ALL
SELECT 2,'A1',2 UNION ALL
SELECT 3,'A2',3 UNION ALL
SELECT 4,'A2',3 UNION ALL
SELECT 5,'A2',3 UNION ALL
SELECT 6,'A2',1 

SELECT a.*,b.* FROM a inner join (SELECT max(GID) as GID FROM b group by userID) b on a.GID=b.GID