我有一個如下結構的表格。由於逗號分隔值,無法弄清楚如何連接表格
select loginid,alloted_area from tbllogin
其中返回此結果。
loginid alloted_area
------------- ---------------------------
01900017 22,153,169,174,179,301
01900117 254,91,92,285,286,287
01900217 2,690,326,327,336
17900501 null
17900601 28,513,409,410
17901101 254,91,92,285
17901701 59,1302,1303
17902101 2,690,326,327
17902301 20,159,371,161
17902401 null
我有另一個表tblarea
它的ID存儲在逗號分隔值以上表中時的區域被分配給用戶。我想加入這兩個表格,並留下最後一個尚未分配區域的條目。現在我已經多次被告知,以逗號分隔值存儲數據是一種不好的做法(我想這是因爲我面臨的問題),但我知道,但是這種結構是由我公司的另一位開發人員創建的,而不是我請幫忙,而不是downvoting。這是我曾嘗試:
declare @csv varchar(max)='';
SELECT @CSV = COALESCE(@CSV + ', ', '') + case when alloted_area is null or alloted_area='' then '0' else alloted_area end from tbllogin;
select * from tblarea where id in (select 0 union select sID from splitstring(@CSV,','));
這確實得到了區,但沒有辦法它可以給我說,地區已被分配給用戶的登錄。示例輸入和輸出。
tbllogin
loginid alloted_area
------------- ---------------------------
a1 1,3,5
a2 2,4
a3 1,4
a4 null
tblarea
id area_name
------------- ---------------------------
1 v
2 w
3 x
4 y
5 z
加入後,我需要這個結果
login_id area_name
------------- ---------------------------
a1 v
a1 x
a1 z
a2 w
a2 y
a3 v
a3 y
你能編輯你的問題,並清楚地向我們展示示例輸入和預期輸出嗎?我有一些解決方法,但你的數據不清楚。 –
當數據增長時,這將是一個真正的痛苦。儘管您對錶格設計不負責任。您可以用這種方式解釋存儲數據時遇到的問題,並將其更改爲合適的標準化表 –