我有两个表:MyOrders和MyDrivers。SQL Server - 将Table1连接到Table2 ON子串(T1.Field)= T2.ID
在表MyOrders,我有一个名为详细列(数据类型TEXT - 我知道,但我没有建立数据库...)
在MyOrders.Details,有时有逗号分隔的列表与MyDrivers表的ID值对应的数值。
目标是使用这些列表将MyOrders加入MyDrivers。
例如:
CREATE TABLE MyOrders
(
MyOrderID INT IDENTITY,
Details TEXT -- Wish it were NVarchar, but what can I do...
)
GO
CREATE TABLE MyDrivers
(
MyDriverID INT IDENTITY,
DriverName NVARCHAR(50)
)
GO
INSERT INTO MyOrders (Details) VALUES ('1,3,5,7,9')
INSERT INTO MyOrders (Details) VALUES ('2,4,6,8')
INSERT INTO MyOrders (Details) VALUES ('1,2,3,4')
INSERT INTO MyOrders (Details) VALUES ('4,5,6,7,8')
INSERT INTO MyOrders (Details) VALUES (NULL)
INSERT INTO MyOrders (Details) VALUES ('')
INSERT INTO MyOrders (Details) VALUES ('9')
INSERT INTO MyDrivers (DriverName) VALUES ('Alex')
INSERT INTO MyDrivers (DriverName) VALUES ('Bobby')
INSERT INTO MyDrivers (DriverName) VALUES ('Carl')
INSERT INTO MyDrivers (DriverName) VALUES ('Daryl')
INSERT INTO MyDrivers (DriverName) VALUES ('Ed')
INSERT INTO MyDrivers (DriverName) VALUES ('Frank')
INSERT INTO MyDrivers (DriverName) VALUES ('George')
INSERT INTO MyDrivers (DriverName) VALUES ('Hal')
INSERT INTO MyDrivers (DriverName) VALUES ('Ichabod')
INSERT INTO MyDrivers (DriverName) VALUES ('Justin Timberlake')
SELECT * FROM MyOrders O
INNER JOIN MyDrivers D
ON D.MyDriverID = ...? substring()? patindex()?
WHERE O.MyOrderID = 1
这里所期望的结果是,对于MyOrderID 1,我会收到5行的结果:一个用于每个在该详细列表分配给该命令的五个驱动的相同的顺序。如果没有列表(NULL,'','',''),那么我不希望返回任何行。 **有时用户删除这个字段中的值并留下空格,所以我假设我将不得不使用TRIM。但他们总是添加必要的逗号,所以至少有...
我不知道如何去做这件事;我仍然需要学习很多SQL。任何有用的提示/想法将不胜感激。
非常感谢您提前!
我选择这个答案* THE *回答它的简单。对于提供的示例数据,此解决方案似乎工作得更快一些,但只有几毫秒。然而,我指出@wewesthemenace提供的答案也很有用,它提供了一个永久性函数,可以在类似实例中使用而不必重写查询,这显然是一个学习点。感谢你们的回应! – 3BK