很菜的问题,求一SQL语句。

diablo8848 2007-07-19 04:38:07
有4个表,分别为:

TA TB TC TD

ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
1 大众 1 YQ 1 TQS 1 DELL
2 万联 2 MC 2 KL
3 ST 3 DY

说明:ID1=ID2=ID3=ID4=NO,且标记为唯一
数据的填充顺序依次为:TA、TB、TC、TD

现需要一SQL语句,要求输入NO后,显示该NO所对应的所有数据,没有数据的显示空白。
如输入1(即NO=1),查询结果为:
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
1 大众 1 YQ 1 TQS 1 DELL

输入3(即NO=3),查询结果为:
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
3 ST 3 DY


请大虾们帮帮忙,不胜感谢。
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
diablo8848 2007-07-20
  • 打赏
  • 举报
回复
echiynn(寶琲)
你的方法可行,昨天是我自己的问题
现在已经解决了。
chenhexi007 2007-07-20
  • 打赏
  • 举报
回复
MARK
谁是谁的谁 2007-07-19
  • 打赏
  • 举报
回复
use pubs
drop table TA,TB,TC,TD
go
create table TA(ID1 INT,客户名称 varchar(10))
create table TB(ID2 int,供应商 varchar(10))
create table TC(ID3 int,加工商 varchar(10))
create table TD(ID4 int,交付单位 varchar(10))
insert into TA
select 1,'大众'
union all select 2,'万联'
union all select 3,'ST'
insert into TB
select 1,'YQ'
union all select 2,'MC'
union all select 3,'DY'
insert into TC
select 1,'TQS'
union all select 2,'KL'
insert into TD
select 1,'DELL'

select ta.ID1 ,ta. 客户名称 , tb.ID2 , tb.供应商 , tc.ID3 ,tc.加工商 , td.ID4 ,td.交付单位
from ta,tb,tc,td
where ta.id1*=tb.id2
and ta.id1*=tc.id3
and ta.id1*=td.id4
and ta.id1=3
---------------------
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
----------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
3 ST 3 DY NULL NULL NULL NULL

(所影响的行数为 1 行)
echiynn 2007-07-19
  • 打赏
  • 举报
回复


我不是都把執行結果貼出來了嗎

我是經過測試後才貼出來的
diablo8848 2007-07-19
  • 打赏
  • 举报
回复
楼上的,我刚才用了你写的语句,执行的时候提示错误为:
服务器: 消息 156,级别 15,状态 1,过程 fn_qry
在关键字 'select' 附近有语法错误。
就是select * from dbo.fn_qry('3')这一行
你能正确执行?
echiynn 2007-07-19
  • 打赏
  • 举报
回复
--借用4樓 gahade(与君共勉) 的數據
drop table TA,TB,TC,TD
go
create table TA(ID1 varchar(2),客户名称 varchar(10))
create table TB(ID2 varchar(2),供应商 varchar(10))
create table TC(ID3 varchar(2),加工商 varchar(10))
create table TD(ID4 varchar(2),交付单位 varchar(10))
insert TA select '1','大众'
union all select '2','万联'
union all select '3','ST'
insert TB select '1','YQ'
union all select '2','MC'
union all select '3','DY'
insert TC select '1','TQS'
union all select '2','KL'
insert TD select '1','DELL'


--創建函數
create function fn_qry(@id varchar(2))
returns table
as
return select * from
TA left join TB on TA.ID1 = TB.ID2
left join TC on TA.ID1 = TC.ID3
left join TD on TA.ID1 = TD.ID4
where ID1 = @id

--調用函數
select * from dbo.fn_qry('3')

--結果
/*
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
---- ---------- ---- ---------- ---- ---------- ---- ----------
3 ST 3 DY NULL NULL NULL NULL

(所影响的行数为 1 行)
*/
diablo8848 2007-07-19
  • 打赏
  • 举报
回复
echiynn(寶琲),你的那个出现这样的问题,能说说吗,俺确实太菜了,不好意思

服务器: 消息 1075,级别 15,状态 1,过程 fn_qry,行 11
标量值的函数中的 RETURN 语句必须含有参数。
服务器: 消息 170,级别 15,状态 1,过程 fn_qry,行 16
第 16 行: 'BEGIN' 附近有语法错误。
diablo8848 2007-07-19
  • 打赏
  • 举报
回复
有一点忘了说了,就是ID是唯一但不是int型,而是varchar类型的,ID在这里不是主键。
gahade 2007-07-19
  • 打赏
  • 举报
回复
来了一位拉客的~~~~~
echiynn 2007-07-19
  • 打赏
  • 举报
回复
樓上的真搞笑:)
pastbee 2007-07-19
  • 打赏
  • 举报
回复
left join 不能满足你说的要求的 有兴趣加我的qq群32097372
gahade 2007-07-19
  • 打赏
  • 举报
回复
drop table TA,TB,TC,TD
go
create table TA(ID1 INT,客户名称 varchar(10))
create table TB(ID2 int,供应商 varchar(10))
create table TC(ID3 int,加工商 varchar(10))
create table TD(ID4 int,交付单位 varchar(10))
insert into TA
select 1,'大众'
union all select 2,'万联'
union all select 3,'ST'
insert into TB
select 1,'YQ'
union all select 2,'MC'
union all select 3,'DY'
insert into TC
select 1,'TQS'
union all select 2,'KL'
insert into TD
select 1,'DELL'

select ID1,
客户名称,
ID2=(select ID2 from TB where ID2=TA.ID1),
供应商=(select 供应商 from TB where ID2=TA.ID1),
ID3=(select ID3 from TC where ID3=TA.ID1),
加工商=(select 加工商 from TC where ID3=TA.ID1),
ID4=(select ID4 from TD where ID4=TA.ID1),
交付单位=(select 交付单位 from TD where ID4=TA.ID1)
from TA
where TA.ID1=1
/*
ID1 客户名称 ID2 供应商 ID3 加工商 ID4 交付单位
----------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
1 大众 1 YQ 1 TQS 1 DELL

(所影响的行数为 1 行)
*/
昵称被占用了 2007-07-19
  • 打赏
  • 举报
回复
select max(id1) as id1,max(客户名称) as 客户名称,
max(id2) as id2,max(供应商) as 供应商,
max(id3) as id3,max(加工商) as 加工商,
max(id4) as id4,max(交付单位) as 交付单位
from (
select id1,客户名称,
case(null as int) as ID2,cast(null as varchar(40)) as 供应商,
case(null as int) as ID3,cast(null as varchar(40)) as 加工商,
case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
from TA
where id1=3
union all
select null as id1,null as 客户名称,
ID2,供应商,
case(null as int) as ID3,cast(null as varchar(40)) as 加工商,
case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
from TB
where id2=3
union all
select null as id1,null as 客户名称,
null as ID2,null as 供应商,
ID3,加工商,
case(null as int) as ID4,cast(null as varchar(40)) as 交付单位
from TC
where id3=3
union all
select null as id1,null as 客户名称,
null as ID2,null as 供应商,
null as ID3,null as 加工商,
ID4,交付单位
from TD
where id4=3
) as t
echiynn 2007-07-19
  • 打赏
  • 举报
回复
create function fn_qry(@id int)
returns table
as
begin
return select * from
TA left join TB on TA.ID = TB.ID
left join TC on TA.ID = TC.ID
left join TD on TA.ID = TD.ID
where ID = @id
end

--調用函數
select * from dbo.fn_qry(1)
echiynn 2007-07-19
  • 打赏
  • 举报
回复
select * from
TA left join TB on TA.ID = TB.ID
left join TC on TA.ID = TC.ID
left join TD on TA.ID = TD.ID

34,590

社区成员

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

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