select 问题

leohuang 2004-07-10 11:37:31
假设有下面一个表

编号(主键) 名称 父编号
ID Name PID
1 AA
2 BB
3 AA1 1

我想通过一个select语句获得下面的数据
ID(编号) ,NAME(名称),PNAME(父级名称),如果本级父编号为空,则父级名称为空,我通过与自身连接可以获取到父编号不为空的数据,但是为空的就不能返回数据
select a.ID,a.NAME,b.NAME as PNAME from table_A a inner join on a.ID=b.PID where a.ID=3

怎么写才能达到我要的功能阿?谢谢



...全文
79 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
huwgao 2004-07-10
  • 打赏
  • 举报
回复
这里高手多多,我也是最近才上。常上来看看就能学到不少东西。
leohuang 2004-07-10
  • 打赏
  • 举报
回复
victorycyz(中海) 刚才我写错了,呵呵,忘了写 B表,给你个鼓励奖,哥们,多谢,这里的朋友真热情啊^_^
leohuang 2004-07-10
  • 打赏
  • 举报
回复
huwgao(小楼听雨) 高手,多谢!向你学习,给我个联系方式把,哥们,俺要拜师

上茶
victorycyz 2004-07-10
  • 打赏
  • 举报
回复

刚才没有仔细看你写的关联字段。sorry.

这回更正,又被楼上抢了先。
victorycyz 2004-07-10
  • 打赏
  • 举报
回复

select a.ID,a.NAME,b.NAME as PNAME
from table_A a left join table_A b on a.PID=b.ID
huwgao 2004-07-10
  • 打赏
  • 举报
回复
左联接这么用:
select a.id,a.name,pname=b.name
from @t a left join @t b on a.pid=b.id
huwgao 2004-07-10
  • 打赏
  • 举报
回复
declare @t table(id int,name varchar(5),pid int)
insert into @t select 1,'aa',null
union all select 2,'bb',null
union all select 3,'aa1',1

select id,name,pname=(select name from @t where id=a.pid)
from @t a

(所影响的行数为 3 行)

id name pname
----------- ----- -----
1 aa NULL
2 bb NULL
3 aa1 aa

(所影响的行数为 3 行)
leohuang 2004-07-10
  • 打赏
  • 举报
回复
用左连好像也不行,那个大侠在自己数据库上试一下,我在外面,没测试环境,给我一个确切的SQL,麻烦了
huwgao 2004-07-10
  • 打赏
  • 举报
回复
select id,name,pname=(select name from where id=a.pid)
from tb a
victorycyz 2004-07-10
  • 打赏
  • 举报
回复
select a.ID,a.NAME,b.NAME as PNAME
from table_A a left join table_A b on a.ID=b.PID

34,576

社区成员

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

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