由於水平有限,這個問題困繞了我好久,今天終於在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...