一个表的外键指向该表的主键,连接查询

微笑俱乐部 2010-09-27 09:47:40
表结构如下:

CREATE TABLE `tdepartment` (
`td_id` int(11) NOT NULL AUTO_INCREMENT,
`td_u_id` int(11) DEFAULT NULL COMMENT '上级部门,当为null时表示无上级部门',
`td_name` varchar(200) NOT NULL COMMENT '部门名称',
`td_leader` varchar(200) DEFAULT NULL COMMENT '部门负责人',
`td_memo` text COMMENT '部门描述',
PRIMARY KEY (`td_id`),
KEY `td_u_id` (`td_u_id`),
CONSTRAINT `td_u_id` FOREIGN KEY (`td_u_id`) REFERENCES `tdepartment` (`td_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='运营商部门表'


现在我想查到
部门名称、上级部门名称、部门描述、部门负责人(上级部门一个是该表的一条记录)
...全文
628 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
微笑俱乐部 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 denghui_li 的回复:]

SQL code

--- ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
---一个小问题 楼主 你的数据库是 
sql server 吗?
[/Quote]
是mysql
lg314 2010-09-28
  • 打赏
  • 举报
回复
select a.td_name,b.td_name,a.td_memo,a.td_leader from tdepartment a left join tdepartment b on a.td_id=b.td_u_id
闹铃 2010-09-27
  • 打赏
  • 举报
回复

--- ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
---一个小问题 楼主 你的数据库是 
sql server 吗?
闹铃 2010-09-27
  • 打赏
  • 举报
回复

select t1.td_name as[部门名称],isnull(t2.td_name,N‘最高部门’)as[上级部门名称],
t1.td_memo as [部门描述],t1.td_leader as [部门负责人]
from tdepartment as t1
cross apply (select td_name
from tdepartment
where td_id=t1.td_u_id)as t2;

「已注销」 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 weixiaojulebu 的回复:]

引用 4 楼 zsh0809 的回复:

引用 3 楼 weixiaojulebu 的回复:

引用 2 楼 zsh0809 的回复:

外键指向该表的主键
====
什么意思?

就是说这个表建有主键跟外键,比如说,ID、u_id两个字段,ID为主键,u_id为跟ID关联的外键

外键关联本表主键?
看一下主键,外键的定义:

首先区别主表和从表
(1) 主表是……
[/Quote]
那就建立一个部门表啊,不同部门对应不同的id,你这个表中的部门只是该表的一个属性,
关联到部门表的相应id就可以了
微笑俱乐部 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zsh0809 的回复:]

引用 3 楼 weixiaojulebu 的回复:

引用 2 楼 zsh0809 的回复:

外键指向该表的主键
====
什么意思?

就是说这个表建有主键跟外键,比如说,ID、u_id两个字段,ID为主键,u_id为跟ID关联的外键

外键关联本表主键?
看一下主键,外键的定义:

首先区别主表和从表
(1) 主表是引用的表
(2)从表是被引用的表
这两个表……
[/Quote]

没见过是吧!哈哈哈,你试试啦,比如说要建一个关于部门的信息表,表内有一个字段是上级部门,那应该怎么建?上级部门也是部门呀?你是怎么关联的?
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
主键是对表进行约束,保证数据的唯一性!
外键是建立表与表之间的关系,方便表之间的数据交互。
claro 2010-09-27
  • 打赏
  • 举报
回复

1、MySQL还是 建议发到MySQL版从而得到专业回复。
2、一个 table不存在连接查询,而且从关系上应该需要一个描述上级部分的table。
3、尝试执行:
select b.上级部分名称,a.td_u_id ,a.td_name , a.td_leader ,a.td_memo
from tdepartment a,需要关联的表 b
where a.td_u_id =b.td_u_id
--或者
select b.上级部分名称,a.td_u_id ,a.td_name , a.td_leader ,a.td_memo
from tdepartment a
left join 需要关联的表 b on a.td_u_id =b.td_u_id
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 weixiaojulebu 的回复:]

引用 2 楼 zsh0809 的回复:

外键指向该表的主键
====
什么意思?

就是说这个表建有主键跟外键,比如说,ID、u_id两个字段,ID为主键,u_id为跟ID关联的外键
[/Quote]
外键关联本表主键?
看一下主键,外键的定义:

首先区别主表和从表
(1) 主表是引用的表
(2)从表是被引用的表
这两个表是有关系的,要想确定他们的关系就会有主从表的关系,那么外键主要的作用是强调节器引用完整
性规则

外键:是相对主表而言的,主表的外键是从表的主键名者是候选键
微笑俱乐部 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zsh0809 的回复:]

外键指向该表的主键
====
什么意思?
[/Quote]
就是说这个表建有主键跟外键,比如说,ID、u_id两个字段,ID为主键,u_id为跟ID关联的外键
「已注销」 2010-09-27
  • 打赏
  • 举报
回复
外键指向该表的主键
====
什么意思?
微笑俱乐部 2010-09-27
  • 打赏
  • 举报
回复
求用一条sql语句实现

34,593

社区成员

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

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