表A中多个字段的内容有表B查询得到,如何写SQL语句?

麻酱面条 2007-08-16 05:45:39
表A:
字段:name1 name2 name3
内容:A B C

表B:
字段:id name
内容:A 张三
B 李四
C 王二

如何写SQL语句使表A对应的DBGrid显示的是
张三 李四 王二
这样的结果?


...全文
217 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
麻酱面条 2007-08-18
  • 打赏
  • 举报
回复
太感谢了,偶只会简单的单表查询,又学到一些,哈哈。

结贴!

再给你加10分,感谢 鱼 的热心回答!
paoluo 2007-08-18
  • 打赏
  • 举报
回复
sirit(兽性大发的小白兔) ( ) 信誉:100 2007-08-17 20:08:38 得分: 0


A中的name在B中是一定存在的,使用关联是什么意思?
需要改动数据库吗?
我没法动数据库的,只能做个客户端连接数据库。


--------------------
暈倒,不用改動數據庫的。

如果A中的name在B中是一定存在的,可以這麼寫,這就是關聯的寫法。

Select
B.name As name1,
C.name As name2,
D.name As name3
From
A
Inner Join
B
On A.name1 = B.id
Inner Join
B C
On A.name2 = C.id
Inner Join
B D
On A.name3 = D.id

paoluo 2007-08-17
  • 打赏
  • 举报
回复
sirit(兽性大发的小白兔) ( ) 信誉:100 2007-8-16 22:34:36 得分: 0



鱼的写法我看不懂,我只有两个表,表A和B,怎么多出来A B C D,是什么意思呀?
能不能解释一下下。多谢!


-----------
A B還是你原來的表。 

C D都只是你B表的別名而已。

這個語句,使用關聯的效率更優。

如果你A中的name在B中一定存在,可以將left join改為inner join。
麻酱面条 2007-08-17
  • 打赏
  • 举报
回复
A中的name在B中是一定存在的,使用关联是什么意思?
需要改动数据库吗?
我没法动数据库的,只能做个客户端连接数据库。
麻酱面条 2007-08-16
  • 打赏
  • 举报
回复
鱼的写法我看不懂,我只有两个表,表A和B,怎么多出来A B C D,是什么意思呀?
能不能解释一下下。多谢!
麻酱面条 2007-08-16
  • 打赏
  • 举报
回复
我的SQL语句要在c++ builder里面用,提取出来的记录在DBGrid里面显示。
数据有几万条,按照 鱼 的方法,速度怎么样?
blackmeit 2007-08-16
  • 打赏
  • 举报
回复
declare @A table(name1 nvarchar(1),name2 nvarchar(1),name3 nvarchar(1))
declare @B table(id nvarchar(1),name nvarchar(10))
insert @A select 'A','B','C'
insert @B select 'A',N'张三' union all
select 'B',N'李四' union all select 'C',N'王二'

select b.name,c.name,d.name from @A a
inner join @B b on a.name1 = b.id
inner join @B c on a.name2 = C.id
inner join @B d on a.name3 = d.id


------------

name name name
---------- ---------- ----------
张三 李四 王二
blackmeit 2007-08-16
  • 打赏
  • 举报
回复
declare @A table(name1 nvarchar(1),name2 nvarchar(1),name3 nvarchar(1))
declare @B table(id nvarchar(1),name nvarchar(10))
insert @A select 'A','B','C'
insert @B select 'A',N'张三' union all
select 'B',N'李四' union all select 'C',N'王二'


select(select name from @B where id = a.name1) name1,
(select name from @B where id = a.name2)name2,
(select name from @B where id = a.name3)name3
from @A a

-----

name1 name2 name3
---------- ---------- ----------
张三 李四 王二
paoluo 2007-08-16
  • 打赏
  • 举报
回复
不過不建議使用你那種子查詢的方式,可以直接關聯的嘛。 :)
paoluo 2007-08-16
  • 打赏
  • 举报
回复
我的錯了點,要改下


Select
B.name As name1,
C.name As name2,
D.name As name3
From
A
Left Join
B
On A.name1 = B.id
Left Join
B C
On A.name2 = C.id
Left Join
B D
On A.name3 = D.id
brother2605 2007-08-16
  • 打赏
  • 举报
回复
鱼的动作太快了~~~~
brother2605 2007-08-16
  • 打赏
  • 举报
回复
declare @t1 table(name1 char(1),name2 char(1),name3 char(1))
declare @t2 table([id] char(1),[name] varchar(20))
insert into @t1
select'A','B','C'
insert into @t2
select'A','张三'
union all select'B','李四'
union all select'C','王二'

select (select [name]from @t2 where [id]=a.name1)as name1,
(select [name]from @t2 where [id]=a.name2)as name2,
(select [name]from @t2 where [id]=a.name3)as name3
from @t1 a

/*结果
name1 name2 name3
-------------------- -------------------- --------------------
张三 李四 王二
*/
paoluo 2007-08-16
  • 打赏
  • 举报
回复
Select
B.name As name1,
C.name As name2,
D.name As name3
From
A
Left Join
B
On A.name1 = B.id
Left Join
C
On A.name2 = C.id
Left Join
D
On A.name3 = D.id

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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