[英]Method to find hits in comma-separated number string on SQL Server
[英]Comma-separated operation in SQL Server
表1 :
T1Id Name SchoolIds
------------------------------
01 A 1,2,3,4
02 B 4,20,3,1
03 C 20,30,40
04 D 30,20,10,2
表2 :
T2ID SchoolIds Username
--------------------------------------
01 1,2,3,4 a@a.com
02 20,30,40,2 b@a.com
03 30,20,10,2 c@a.com
04 4,20,3,1 d@a.com
有兩個頁面,一個是登錄頁面,另一個是記錄頁面。
當某人使用username='a@a.com'
登錄並進行記錄時,該代碼應僅顯示Table1
中的那些行與Table1
1中SchoolIds
列的匹配項。
如果使用a@a.com
登錄,則期望的結果將是:
T1Id Name SchoolIds
-----------------------------
01 A 1,2,3,4
02 B 4,20,3,1
04 D 30,20,10,2
首先,不要將項目存儲為逗號分隔的字符串。
相反,請轉到一個新表,該表具有附加到父表的外鍵。 這也將使您輕松獲得所需的數據。
所以我的建議是創建一個新表並將每個項目存儲為單獨的行,並與父表匹配一些ID :)
看起來很大,但是卻能提供您想要的東西。 有任何建議,請在評論中注明。
DECLARE @Table1 TABLE(T1ID INT, Name VARCHAR(1), SchoolIds VARCHAR(20))
INSERT INTO @Table1 VALUES(01,'A','1,2,3,4')
INSERT INTO @Table1 VALUES(02,'B','4,20,3,1')
INSERT INTO @Table1 VALUES(03,'C','20,30,40')
INSERT INTO @Table1 VALUES(04,'D','30,20,10,2')
DECLARE @Table2 TABLE(T2ID INT, SchoolIds VARCHAR(20), Username VARCHAR(20))
INSERT INTO @Table2 VALUES(01,'1,2,3,4','a@a.com')
INSERT INTO @Table2 VALUES(02,'20,30,40,2','b@a.com')
INSERT INTO @Table2 VALUES(03,'30,20,10,2','c@a.com')
INSERT INTO @Table2 VALUES(04,'4,20,3,1','d@a.com')
SELECT A.T1ID,Name,
Split.a.value('.', 'VARCHAR(100)') AS [SchoolId]
INTO #T1Vals
FROM
(
SELECT T1ID,Name,
CAST ('<M>' + REPLACE(SchoolIds, ',', '</M><M>') + '</M>' AS XML) AS Data
FROM @Table1
) AS A CROSS APPLY Data.nodes ('/M') AS Split(a);
SELECT A.T2ID,Username,
Split.a.value('.', 'VARCHAR(100)') AS [SchoolId]
INTO #T2Vals
FROM
(
SELECT T2ID, Username,
CAST ('<M>' + REPLACE(SchoolIds, ',', '</M><M>') + '</M>' AS XML) AS Data
FROM @Table2
WHERE Username='a@a.com'
) AS A CROSS APPLY Data.nodes ('/M') AS Split(a);
SELECT *
FROM @Table1
WHERE T1ID IN(
SELECT T1ID
FROM #T1Vals
WHERE [SchoolId] IN(SELECT [SchoolId] FROM #T2Vals))
DROP TABLE #T1Vals
DROP TABLE #T2Vals
輸出:
T1ID Name SchoolIds
1 A 1,2,3,4
2 B 4,20,3,1
4 D 30,20,10,2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.