![](/img/trans.png)
[英]MySql - how to select rows from one table based on multiple values joined in another table
[英]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.