2016-07-06 4 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이 같은

뭔가가있는 모든 ItemIDs 당겨 사용할 필요가 int로 각 항목의 번호를 가지고 다른 테이블이있다.

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+',%' 

이 경우에만 특정 ids에 맞게 보장하기 위해 시작과 itemnums의 마지막에 쉼표를 연결합니다.

+0

도움을 주셔서 감사합니다. 이 경우 ItemNums 필드에 수백 개의 항목이있을 수 있으므로 구조를 수정하는 것이 가장 좋습니다. – Xerc

0

저는 개인적으로 dbo.tables를 표준화 할 것을 권장합니다.

ItemID  ItemNums 
1   1 
1   4 
1   5 
2   1 

그런 다음 당신은 몇 가지 목록에서 ItemNums으로 행을 꺼내 조인 또는 하위 쿼리를 사용할 수 있습니다 으로 더 좋을 것이다.

그렇지 않으면 매우 혼란스럽고 빠르게 진행되지는 않습니다.