iT邦幫忙

0

SQL要怎麼下

XYZ 2020-02-08 21:25:321831 瀏覽
  • 分享至 

  • xImage

我想讓處代號a可以互看處代號a、d、e的money但不能看a、d、e處代號以外的money,處代號g可以互看g、h的money,但不能看g、h處代號以外的money,這個SQL要怎麼下?

https://ithelp.ithome.com.tw/upload/images/20200208/20108157dhI7SGkIaS.jpg

dragonH iT邦超人 5 級 ‧ 2020-02-08 22:42:01 檢舉
寫死 或 弄另一個table 來記權限
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
5
rogeryao
iT邦超人 7 級 ‧ 2020-02-08 22:48:26
最佳解答

這個問題應屬於權限控管問題,建議新增一個 table 來處理,以後只要維護這個 table 就好,不用改程式
原 table

CREATE TABLE TEST_M(A nvarchar(10),B nvarchar(10),C nvarchar(10),D int);
insert into TEST_M
values ('109','a','1',100),
('109','a','2',200),
('109','a','3',300),
('109','d','4',400),
('109','e','5',500),
('109','f','6',600),
('109','g','7',700),
('109','h','8',800),
('109','i','9',900);

權限控管 table

-- 權限控管群組 : E => 處代號 , F => 群組代號
CREATE TABLE TEST_K(E nvarchar(10),F nvarchar(10));
insert into TEST_K
values ('a','x'),
('d','x'),
('e','x'),
('g','y'),
('h','y'),
('f','z'),
('i','w');
select TEST_M.*
from TEST_M
where 1=1
and TEST_M.B in (
select K2.E
from TEST_K as K1
left join TEST_K as K2 on K2.F=K1.F
where 1=1
and K1.E='a'
)
order by A,B

DEMO

0
阿展展展
iT邦好手 1 級 ‧ 2020-02-08 21:56:58

a -> where 處代號 = a or d or e
g -> where 處代號 = g or h

分兩句寫啊0.0

0
小魚
iT邦大師 1 級 ‧ 2020-02-09 07:46:09

同意 dragonH,
弄另一個table 來記權限.

0
cyc0713
iT邦新手 5 級 ‧ 2020-03-13 15:14:11

SELECT * FROM [dbo].[TEST_M] WHERE (SELECT COUNT(*)
FROM [testdb4joe].[dbo].[TEST_M] where ID='a')>=1 AND ID IN ('a','d','e')

SELECT * FROM [dbo].[TEST_M] WHERE (SELECT COUNT(*)
FROM [testdb4joe].[dbo].[TEST_M] where ID='g')>=1 AND ID IN ('g','h')

我要發表回答

立即登入回答