SQL的查询JOIN

Sundery 2005-03-21 09:11:39
create table t1
(
[id] int identity(1,1) primary key,
Cargo char(1),
CargoNumber char(1),
InStockNumber int
)
insert into t1 values('A','B',10)
insert into t1 values('A','C',10)
insert into t1 values('A','D',10)
-------------------------------------------
create table t2
(
[id] int foreign key references t1([id]),
opDate datetime,
opNumber int
)
insert into t2 values(1,'2005-1-1',7)
insert into t2 values(2,'2005-1-1',3)
insert into t2 values(2,'2005-1-1',2)
insert into t2 values(2,'2005-1-1',4)


select a.cargo,a.cargonumber,a.instocknumber,b.opDate,b.opNumber
from t1 as a inner join t2 as b on (a.[id] = b.[id])


我希望的结果是
第3,第4行的A,C由于已经在显示过了,所以不要再显示出来
...全文
224 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sundery 2005-04-06
  • 打赏
  • 举报
回复
Thanks:)
天地客人 2005-03-22
  • 打赏
  • 举报
回复
UP
Sundery 2005-03-22
  • 打赏
  • 举报
回复
不好意思啊,其实我要的结果是这个样子的:

A B 10 2005-01-01 00:00:00.000 7
A C 10 2005-01-01 00:00:00.000 3
10 2005-01-01 00:00:00.000 2
10 2005-01-01 00:00:00.000 4
A D 10 NULL NULL
yangys 2005-03-22
  • 打赏
  • 举报
回复
^_^

不愧是邹建!
zjcxc 元老 2005-03-22
  • 打赏
  • 举报
回复
create table t1
(
[id] int identity(1,1) primary key,
Cargo char(1),
CargoNumber char(1),
InStockNumber int
)
insert into t1 values('A','B',10)
insert into t1 values('A','C',10)
insert into t1 values('A','D',10)
-------------------------------------------
create table t2
(
[id] int foreign key references t1([id]),
opDate datetime,
opNumber int
)
insert into t2 values(1,'2005-1-1',7)
insert into t2 values(2,'2005-1-1',3)
insert into t2 values(2,'2005-1-1',2)
insert into t2 values(2,'2005-1-1',4)


select cargo=case when b.opNumber is null or b.opNumber=(select top 1 opNumber from t2 where id=a.id)
then a.cargo else '' end
,cargonumber=case when b.opNumber is null or b.opNumber=(select top 1 opNumber from t2 where id=a.id)
then a.cargonumber else '' end
,a.instocknumber,b.opDate,b.opNumber
from t1 as a left join t2 as b on (a.[id] = b.[id])


go

drop table t2,t1

/*--结果

cargo cargonumber instocknumber opDate opNumber
----- ----------- ------------- ------------------------- ---------
A B 10 2005-01-01 00:00:00.000 7
A C 10 2005-01-01 00:00:00.000 3
10 2005-01-01 00:00:00.000 2
10 2005-01-01 00:00:00.000 4
A D 10 NULL NULL

(所影响的行数为 5 行)

--*/
zjcxc 元老 2005-03-21
  • 打赏
  • 举报
回复
需要t2表中有能与id配置,唯一确定一条记录的字段,上述处理中,使用了opNumber
zjcxc 元老 2005-03-21
  • 打赏
  • 举报
回复
create table t1
(
[id] int identity(1,1) primary key,
Cargo char(1),
CargoNumber char(1),
InStockNumber int
)
insert into t1 values('A','B',10)
insert into t1 values('A','C',10)
insert into t1 values('A','D',10)
-------------------------------------------
create table t2
(
[id] int foreign key references t1([id]),
opDate datetime,
opNumber int
)
insert into t2 values(1,'2005-1-1',7)
insert into t2 values(2,'2005-1-1',3)
insert into t2 values(2,'2005-1-1',2)
insert into t2 values(2,'2005-1-1',4)


select a.cargo,a.cargonumber,a.instocknumber,b.opDate,b.opNumber
from t1 as a inner join t2 as b on (a.[id] = b.[id])
and b.opNumber=(select top 1 opNumber from t2 where id=a.id)

go

drop table t2,t1

/*--结果

cargo cargonumber instocknumber opDate opNumber
----- ----------- ------------- ------------------------ ---------
A B 10 2005-01-01 00:00:00.000 7
A C 10 2005-01-01 00:00:00.000 3

(所影响的行数为 2 行)
--*/
xluzhong 2005-03-21
  • 打赏
  • 举报
回复
create table t1
(
[id] int identity(1,1) primary key,
Cargo char(1),
CargoNumber char(1),
InStockNumber int
)
insert into t1 values('A','B',10)
insert into t1 values('A','C',10)
insert into t1 values('A','D',10)
-------------------------------------------
create table t2
(
[id] int foreign key references t1([id]),
opDate datetime,
opNumber int
)
insert into t2 values(1,'2005-1-1',7)
insert into t2 values(2,'2005-1-1',3)
insert into t2 values(2,'2005-1-1',2)
insert into t2 values(2,'2005-1-1',4)

select
a.cargo,
a.cargonumber,
a.instocknumber,
b.opDate,
b.opNumber
from
t1 a
left join
(select * from t2 c where opnumber = (select top 1 opnumber from t2 where id=c.id order by newid())) b
on
(a.[id] = b.[id])

drop table t2
drop table t1
Sundery 2005-03-21
  • 打赏
  • 举报
回复
更正一点,语句应该是:
select a.cargo,a.cargonumber,a.instocknumber,b.opDate,b.opNumber
from t1 as a left join t2 as b on (a.[id] = b.[id])


由于第3,第4行的A,C由于已经在显示过了,所以不要再显示出来

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧