分級查詢的實現

2021-04-20 08:12:25 字數 3949 閱讀 8462

由於水平有限,這個問題困繞了我好久,今天終於在csdn社群解決,高興啊。還是csdn強人多呀。

問題:現在有三個資料表:

表1(user):

user_id    user_name  role_id

1            zs          2

2            ls          1

表2(fieldpriv):

role_id    field_name

1            gdp

2            shengfen

表3(data):

record_id    gdp    shengfen

1            1000    beijing

2            2000    shanghai

目的:

使用者(user)根據其role_id在表2中對應的field_name顯示該欄位對應的表3(data)中的

相應欄位的資料。

比如:zs對應的role_id號為2,然後查詢表2後知道其對應的字段為shengfen,從而在其登入的頁面顯示表3的shengfen欄位資料。

即:使用者zs查詢後,結果為

| shengfen |

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

| beijing  |

| shanghai |

用sql語句實現?

roy_88的解答:

--> --> (roy)生成測試資料

setnocount on;

ifnot

object_id('

user')

isnull

drop

table

[user]go

create

table

[user](

[user_id

]int,[

user_name

]nvarchar(2

),[role_id

]int

)insert

[user

]select1,n

'zs',

2union

allselect2,n

'ls',

1go--> --> (roy)生成測試資料

setnocount on;

ifnot

object_id('

fieldpriv')

isnull

drop

table

fieldpriv

gocreate

table

fieldpriv(

[role_id

]int,[

field_name

]nvarchar(8

))insert

fieldpriv

select1,n

'gdp

'union

allselect2,n

'shengfen'go

--> --> (roy)生成測試資料

setnocount on;

ifnot

object_id('

data')

isnull

drop

table

data

gocreate

table

data(

[record_id

]int,[

gdp]

int,

[shengfen

]nvarchar(8

))insert

data

select1,

1000,n'

beijing

'union

allselect2,

2000,n'

shanghai'go

create

proc

p(@username

nvarchar(2

))as

declare

@sql

nvarchar

(1000

)select

@sql='

select '+

quotename

(b.[

field_name])

+'from data

'from

[user]a

join

fieldpriv b

ona.

[role_id]=

b.[role_id

]wherea.[

user_name]=

@username

exec

(@sql)go

--呼叫

execp '

zs'shengfen

--------

beijing

shanghai

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

qianjin036a

的解答:

create

table

[user](

[user_id

]int,[

user_name

]varchar(10

), role_id

int)

insert

into

[user

]select1,

'zs',

2insert

into

[user

]select2,

'ls',

1create

table

fieldpriv(role_id

int, field_name

varchar(10

))insert

into

fieldpriv

select1,

'gdp

'insert

into

fieldpriv

select2,

'shengfen

'create

table

data(record_id

int,gdp

int, shengfen

varchar(10

))insert

into

data

select1,

1000

,  

'beijing

'insert

into

data

select2,

2000

,  

'shanghai'go

declare

@searchstr

varchar

(1000

)declare

@username

varchar(10

)set

@username='

zs'--此處可改為別的使用者,此段程式可改為函式或過程呼叫

set@searchstr='

select '+

(select

b.field_name

from

[user]a

inner

join

fieldpriv b

onb.role_id

=a.role_id

where

[user_name]=

@username)+

'from data

'exec

(@searchstr)go

drop

table

[user

],fieldpriv,data

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

真謝謝兩位高人了。

ORACLE分級查詢

分級查詢主要用於查詢樹形結構的記錄。樹形結構的資料存放在表中,資料之間的層次關係即父子關係,通過表中的列與列間的關係來描述。查詢雇員表中員工編號 姓名及員工負責人,結果如圖1所示。從結果中可以發現,hardy和rory的負責人是john,john的負責人是donald eric和kary的負責人是h...

hibernate中實現運用分級查詢 2

如果使用原生sql語句進行query查詢時,hibernate是不會自動把結果包裝成實體的。所以要手動呼叫addentity class class 等一系列方法。如session.createsqlquery sql addentity class class 注意hibernate3.0.5不支...

無限分級數量查詢優化

無限分級的資料查詢是個頭痛的問題,遞迴查詢類別,再組合成字串,用 in 來解決子類所有產品的問題,但是這個效率太低,低的讓人無法接受,在此,有乙個sql的方法,可讓我們提高效率。提取子類的所有類別id create function getchild id int returns t table i...