【发布时间】:2015-01-15 06:38:14
【问题描述】:
我有三个表#temp、tbProducts 和tbVendor
tbVendor(States, AgentId, Products)
tbProduct(ProductId, ProductName)
#temp(ProductName)
样本数据
tbVendor
-------------------------------- ----------- --------------------
States AgentId Products
-------------------------------- ----------- --------------------
Alabama,New York 1 T.V, Desktops
New Jersy, Florida 2 Cellphones, Laptops
New York, San Fransico 1 Cellphones, Desktop
New Jersy, San Fransico 1 A.C, Heaters
tbProduct
----------- -------------
ProductId ProductName
----------- -------------
1 T.V
2 Laptops
3 Desktop
4 Cellphones
5 A.C
6 Heaters
#temp
---------------
ProductName
---------------
T.V
Laptops
Desktop
Cellphones
A.C
Heaters
现在我已经对它们执行连接操作以获取 ProductId 和 ProductName
在Agent Id 和States 字段的基础上分配tbVendor。
例如,我在New york 和AgentId = 1 中获取了所有Products 和Names 和Ids,输出应该是这样的
ProductId ProductName
----------- -------------
1 T.V
3 Desktop
4 Cellphones
请注意,#Temp 包含分配给AgentId = 1 的所有产品。不知何故,我设法获取分配给AgentId = 1 的所有产品,并将它们放在#temp 表中。现在我无法设法获取输出,例如仅分配给New York 的产品预期输出如下所示
ProductId ProductName
----------- -------------
1 T.V
3 Desktop
4 Cellphones
我试过下面的代码行它不起作用
Select * from tbProduct L
JOIN #Temp TL ON L.ProductName collate SQL_Latin1_General_CP1_CI_AS = TL.ProductName
JOIN tbVendor Li ON Li.AgentId = @AgentId and Li.States like @States;
注意@States 包含New York 和@AgentId 包含1。
【问题讨论】:
-
你不能重新设计数据库shema吗?目前,您有状态和产品的逗号分隔列表 - 这使得任何连接都非常困难(您必须使用字符串操作)并且无效。
-
我知道这个逗号造成了很多麻烦......但我没有设计这个架构......如果我这样做,我必须重新工作多年的工作由其他开发者完成。完成整个项目需要很长时间...请帮助我
-
tbVendor 的结构违反了 First NF,需要规范化。您将逗号分隔的列表存储在一列中,这有很多缺点。例如,您将无法存储比列中适合的列表更长的列表。编辑:好的,现在我明白了..
-
您能否在问题中包含预期输出的示例?
-
检查上面的问题...我已经标记了预期的输出
标签: sql sql-server sql-server-2008 join