簡體   English   中英

如何基於另一個具有多個值的表中的列值從表中選擇行?

[英]How to select rows from a table based on a column value in another table that has multiple values?

我有兩張桌子。

帶有列UserId,區域的用戶

Area列填充有多個逗號分隔的值(來自列表框)-數據如下所示:

User1 KA,TN,AP,GJ
User2 MH,UP,MP,GJ

訂單包含訂單ID,產品ID,數量,區域

數據如下所示:

1 Prod1 10 GJ
2 Prod1 22 MH
3 Prod2 3  AP
4 Prod2 77 TN

如何從基於User表的Order表中選擇行?

說登錄的用戶是User1 他的領域是KA,TN,AP,GJ

結果應如下所示:

Prod1 10 GJ
Prod2 77 TN

請建議對SQL查詢獲取此結果。

感謝和問候克里希納

請勿將此解決方案設置為一種好的做法,因為正如上面所有評論所述
永遠不要將數據存儲為逗號分隔的項目。

解決方法:-

通過使用Replace功能作為下一個演示,操縱從user表中選擇的值以獲得良好的結構:-

Create table #user (username varchar(10), Areas varchar (100))
go
insert into #user values ('User1', 'KA,TN,AP,GJ')
insert into #user values ('User2', 'MH,UP,MP,GJ')
go
Create table #order ( OrderID int , ProductID varchar(10), Qty int , Area char (2))
go
insert into #order values (1, 'Prod1', 10, 'GJ')
insert into #order values (2, 'Prod1', 22, 'MH')
insert into #order values (3, 'Prod2', 3,  'AP')
insert into #order values (4, 'Prod2', 77, 'TN')
go 

declare @List nvarchar(250)

select @List = '('''+(select Areas from #user where username = 'User1') + ''')'
select @List = replace(@List,',',''',''')


exec ('select ProductID,Qty, area from #order
where Area in' +  @List )

drop table #user
drop table #order

結果:-

在此處輸入圖片說明

注意:我認為您期望的結果集中錯誤地缺少了第三條記錄。

您可以使用patindex

select o.*
from u
join o on patindex('%,'+o.Area+',%', ','+u.area+',')>0
where userid= 'User1'

將數據存儲為逗號分隔的項目不是一個好習慣。 但是您可以嘗試以下操作

DECLARE @V_USER NVARCHAR(100)   ='User1'

SELECT  *
FROM    Order   AS  O
    INNER JOIN User AS U    ON U.Area LIKE '%'+O.Area+'%'
WHERE   U.UserId    =   @V_USER

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM