私は以下の構造のテーブルを持っています。コンマ区切りの値のためにテーブルを結合する方法がわかりません
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
Iは、そのIDS領域がユーザに割り当てられている時には、上記表のカンマ区切りに格納されている別のテーブルtblarea
を有します。私はこれらの2つのテーブルに参加し、まだ割り当てられていない最後のテーブルのようなエントリを残したいと思います。今では、コンマ区切りの値でデータを格納することが悪い習慣であることについて何度か言われています(私はそれが私が直面している問題のためだと思います)。しかし、この構造は私の会社の他の開発者によって作成されています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,','));
これは、面積を取得しているが、それは私の領域が割り当てられていることをユーザーのログインを与えることができる方法はありません。サンプル入力と出力。
loginid alloted_area
------------- ---------------------------
a1 1,3,5
a2 2,4
a3 1,4
a4 null
tbllogin tblarea
id area_name
------------- ---------------------------
1 v
2 w
3 x
4 y
5 z
私はあなたがLIKE
、例えばを使用して参加することができ
login_id area_name
------------- ---------------------------
a1 v
a1 x
a1 z
a2 w
a2 y
a3 v
a3 y
質問を編集して、サンプル入力と予想される出力を明確に表示できますか?私はいくつかの回避策を念頭に置いていますが、あなたのデータは私には分かりません。 –
これはデータが大きくなると本当に苦しいことになります。あなたはテーブルデザインの責任を負いませんが。このようにしてデータを保存する際の問題点を説明し、適切な正規化テーブル –