2017-12-12 17 views
-1

私は画像のようにいくつかのテーブルを持っていますが、最後のテーブルに示すように出力したいと思います。それはBBはあなたが指定した方法を以下にこれを行うことができますsql階層クエリ

+2

をここにほとんどの人がフォーマットされたテキストではなく画像たいあなたは、内側に使用しない理由 – jarlh

+0

は、この結果を達成するために参加する(または画像へのリンクを。) –

答えて

0

アウトSPの

Diagram of table

とSQL Serverのクエリを使用して、それを達成することが可能です。あなたによって与えられた関係は非常に明確ではなかったと私はいくつかの自由を取った:

IF OBJECT_ID ('role') IS NOT NULL 
    DROP TABLE role 
GO 

CREATE TABLE role 
    (
    roid INT NULL, 
    roname VARCHAR (20) NULL 
    ) 
GO 

IF OBJECT_ID ('rolechild') IS NOT NULL 
    DROP TABLE rolechild 
GO 

CREATE TABLE rolechild 
    (
    parentroid INT NULL, 
    childroid INT NULL 
    ) 
GO 

IF OBJECT_ID ('rolechildrel') IS NOT NULL 
    DROP TABLE rolechildrel 
GO 

CREATE TABLE rolechildrel 
    (
    roid INT NULL, 
    rtroid INT NULL 
    ) 
GO 

IF OBJECT_ID ('rt') IS NOT NULL 
    DROP TABLE rt 
GO 

CREATE TABLE rt 
    (
    rtid INT NULL, 
    rtname VARCHAR (20) NULL 
    ) 
GO 

IF OBJECT_ID ('urore') IS NOT NULL 
    DROP TABLE urore 
GO 

CREATE TABLE urore 
    (
    uid INT NULL, 
    roid INT NULL 
    ) 
GO 

IF OBJECT_ID ('usern') IS NOT NULL 
    DROP TABLE usern 
GO 

CREATE TABLE usern 
    (
    uid INT NULL, 
    uname VARCHAR (20) NULL 
    ) 
GO 


SELECT u.uname,r.roname,rt.rtname 
FROM 
usern u JOIN urore ur ON (u.uid = ur.uid) 
JOIN role r ON (ur.roid = r.roid) 
JOIN rolechild rc ON (r.roid = rc.parentroid) 
JOIN rolechildrel rcl ON (rc.childroid = rcl.roid) 
JOIN rt ON rcl.rtroid = rt.rtid