2016-07-06 33 views
0

これにいくつかの助けが必要です。私は仕事をする必要があるという質問がありますが、私は別のクエリの結果でそれを制限する必要があります。SQLクエリ - 別のデータ型の別のSQLクエリによって制限されています

SELECT ItemID, ItemNums 
FROM dbo.Tables 

ItemNumsは、さまざまな項目番号の文字列を格納するために使用されるvarcharフィールドです。

これにより、以下が生成されます。

ItemID  ItemNums 
1   1, 4, 5 
2   1, 3, 4, 5 
3   2 
4   4 
5   1 

私は、関連するItemNumsにこのような

何かを持っているすべてのアイテムIDを引っ張るために使用する必要がINTとして、各項目の番号を持つ別のテーブルを持っています。

SELECT * 
FROM dbo.Tables 
WHERE ItemNums IN (4,5) 

助けてください。

答えて

1

可能であれば、データベーススキーマを変更する必要があります。一般に、カンマで区切られたリストをリレーショナルデータベースに格納することは好ましくありません。それはオプションではない場合

はしかし、ここでlikejoinを使用して一つの方法です:

select * 
from dbo.Tables t 
    join dbo.SecondTable st on ', '+t.ItemNums+',' like '%, '+st.ItemNumId+',%' 

これは、あなたが唯一の特定のidsに一致することを確認するためにitemnumsの最初と最後にカンマを連結します。

+0

ご協力ありがとうございます。 ItemNumsフィールドには何百ものアイテムが存在する可能性があるため、この場合は構造を固定することが最適です。 – Xerc

0

個人的には、dbo.tablesの正規化をお勧めします。

ItemID  ItemNums 
1   1 
1   4 
1   5 
2   1 

が次にあなたには、いくつかのリストの中ItemNumsで行を引き出すために参加したり、サブクエリを使用することができます。 とよいでしょう。

それ以外の場合は、混乱していて、それほど速くはありません。

関連する問題