日期:2014-05-17 浏览次数:20652 次
USE MyDB; GO IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb; GO CREATE TABLE tb ( QX VARCHAR(10) NOT NULL ,--详细权限 QXf VARCHAR(10) NULL, --父权限 CONSTRAINT pk_tb2_QX PRIMARY KEY (QX) ); GO --插入数据 INSERT INTO tb VALUES('F1a',NULL); INSERT INTO tb VALUES('F1b',NULL); INSERT INTO tb VALUES('F1c',NULL); INSERT INTO tb VALUES('F2a','F1a'); INSERT INTO tb VALUES('F2b','F1b'); INSERT INTO tb VALUES('F2c','F1c'); INSERT INTO tb VALUES('F3a','F2a'); INSERT INTO tb VALUES('F3b','F2a'); INSERT INTO tb VALUES('F3c','F2b'); INSERT INTO tb VALUES('F3d','F2b'); --查询结果 SELECT * FROM dbo.tb /* QX QXf F1a NULL F1b NULL F1c NULL F2a F1a F2b F1b F2c F1c F3a F2a F3b F2a F3c F2b F3d F2b */
/* 一类权限 二类权限 三类权限 F1a F2a F3a F1a F2a F3b F1b F2b F3c F1b F2b F3d F1c F2c NULL */
select tb.QX, tb1.QX, tb2.QX from tb left outer join tb tb1 on tb1.QXf = tb.QX left outer join tb tb2 on tb2.QXf = tb1.QX where tb.QXf is null
------解决方案--------------------
SELECT tb.QX , tb1.QX , tb2.QX FROM tb LEFT JOIN tb tb1 ON tb1.QXf = tb.QX LEFT JOIN tb tb2 ON tb2.QXf = tb1.QX WHERE tb.QXf IS NULL
------解决方案--------------------
CREATE TABLE tb ( QX VARCHAR(10) NOT NULL, QXf VARCHAR(10) NULL, CONSTRAINT pk_tb2_QX PRIMARY KEY (QX) ) INSERT INTO tb VALUES('F1a',NULL); INSERT INTO tb VALUES('F1b',NULL); INSERT INTO tb VALUES('F1c',NULL); INSERT INTO tb VALUES('F2a','F1a'); INSERT INTO tb VALUES('F2b','F1b'); INSERT INTO tb VALUES('F2c','F1c'); INSERT INTO tb VALUES('F3a','F2a'); INSERT INTO tb VALUES('F3b','F2a'); INSERT INTO tb VALUES('F3c','F2b'); INSERT INTO tb VALUES('F3d','F2b'); select c.QX '一类权限', d.QX '二类权限', e.QX '三类权限' from (select a.QX from tb a where not exists (select 1 from tb b where b.QX=a.QXf)) c left join tb d on c.QX=d.QXf left join tb e on d.QX=e.QXf /* 一类权限 二类权限 三类权限 ---------- ---------- ---------- F1a F2a F3a F1a F2a F3b F1b F2b F3c F1b F2b F3d F1c F2c NULL (5 row(s) affected) */