表A有字段:
ID ZD1 ZD2......
表B有字段:
FromID ZD1 ZD2 user....
表A是查询主表,表B有对应表A的一行有多条记录,表A和表B通过ID和fromid关联
在表B中有一个user字段,为用户登记帐号
假如user为myname
如何通过查询得到表A中与表B中所有user为myname的数据集信息,并且表A中的记录不能重复.
请大家帮忙,谢谢!!
select discint(*) from A, B
where A.id = B.From id and user = myname
select distinct(*) from A, B
where A.id = B.Fromid and B.user = myname
--1.创建一个合并的函数
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=
select @str=@str+,+user from 表B where FromID=@id
set @str=right(@str,len(@str)-1)
return(@str)
go
--调用自定义函数得到结果
select distinct a.*,b.ZD1,b.ZD2,dbo.fmerg(FromID) from 表A a join 表B b on ID = FromID
select distinct(A.id), ZD1, ZD2 from A, B
where A.id = B.Fromid and B.user = myname
select * from A left join B on a.id=b.fromId where b.user=Myname
A表不重复是的条件是什么,比较哪几个字段不复杂就成立?
select distinct * from a left join b on a.id=b.fromId where b.user=Myname
select * from A left join B on a.id=b.fromId where b.user=Myname
应该是查最后记录的问题吧,假设最后记录的判定条件为ZD1最大
select
*
from
(
select
a.[id],max(a.zd1)
from
a
inner join
b
on b.fromid = a.[id]
group by b.[user] = myname
) as c
inner join
a
on c.[id] = a.[id] and c.[zd1] = a.[zd1]
顺便说一下,不要用distinct,那是垃圾!
A表是主表,B表是子表,要想查出的记录A表不重复是不可能的,因为A表一条记录对应B表多条记录.因此,你要么是看A表内容(不过这种内容相信没有多大用处,题的本意不在此),要么是看A+B表内容(这时A表内容一定会有重复).
如只看A表内容:
select A.ID,A.ZD1,A.ZD2, ... From A
如要看A+B内容:
Select A.ID,A.ZD1,A.ZD2, ... B.ZD1,B.ZD2,B.user ... From A,B
Where A.ID=B.FromID and B.User=myname
因此,你的要求跟现实有点出入...
B表中一个user名和FromID是一一对应吗?
B表中的FromID和A表中的ID是一一对象吗??
select * from A where ID in
(select FromID from B where user=myname group by FromID)