2016-07-06 84 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 

我有了每个项目数量的INT,我需要用它来拉有关联的ItemNums

像这样的东西都ItemIDs另一个表。

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

任何帮助,将不胜感激。

回答

1

如果可能,应该更改数据库模式。通常,在关系数据库中存储逗号分隔列表并不好。

但是,如果这是不是一种选择,这是一个使用一个方式joinlike

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

这样可以将逗号来开始和itemnums的结束,以确保您只匹配具体ids

+0

感谢您的帮助。在这种情况下修复结构是最好的选择,因为ItemNums字段中可能有数百个项目。 – Xerc

0

我个人会建议正常化你的dbo.tables。 这将是更好,因为:

ItemID  ItemNums 
1   1 
1   4 
1   5 
2   1 

然后就可以使用了连接或子查询中拉出来,在一些列表ItemNums行。

否则,这将是一团糟,不是很快。