SQL Server-将Table1加入Table2 ON子串(T1.Field)= T2.ID

3BK

我有两个表:MyOrders和MyDrivers。

在表MyOrders中,我有一列称为Details(数据类型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。任何有用的提示/想法将不胜感激。

提前非常感谢您!

Zohar Peled

您可以这样使用 IN

SELECT * 
FROM MyOrders O
INNER JOIN MyDrivers D
ON ',' + CAST(D.MyDriverID as varchar) +',' IN(','+ ISNULL(O.Details, '')  +',')
WHERE O.MyOrderID = 1

更新
实际上,您不能使用IN,但是可以使用LIKE原因是IN期望值列表而不是用逗号分隔的单个字符串值。

SELECT MyOrderID, MyDriverID, DriverName
FROM MyOrders O
INNER JOIN MyDrivers D
ON ','+ cast(ISNULL(O.Details, '') as varchar(max))  +',' LIKE 
   '%,' + CAST(D.MyDriverID as varchar) +',%'
WHERE O.MyOrderID = 1

使用wewesthemenace他的答案中提供的小提琴,我测试了他的建议解决方案(分割字符串)与我的建议解决方案(例如)的性能。对于您的样本数据,使用like似乎更快(不到一半的时间)(如果数据不同,则结果可能会不同)。您可以在此链接中自行检查

如果可能的话,我强烈建议更改数据库结构并创建另一个表来保存“详细信息”列中当前存储的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果 table1 中的 table2 id 不为空,如何加入 table2

来自分类Dev

SQL table1 row_id不显示table2 row_id

来自分类Dev

SQL Server matching all rows from Table1 with all rows from Table2

来自分类Dev

仅显示table1中与table2不同的字段(SQL Server 2008)

来自分类Dev

SQL - 从 table2 更新 table1 值

来自分类Dev

SQL Server:基于table1中的值在特定table2列中返回值

来自分类Dev

mysql union select where table1 field3 = table2 field5

来自分类Dev

显示来自table1的数据,其中其id(Table1 Id)未包含在table2中

来自分类Dev

如何从table2中提取最接近table1的DATE FIELD的数据?

来自分类Dev

创建一个sql查询以检索2个日期T1和T2之间或T1和T2之外的元素

来自分类Dev

创建一个SQL查询以检索2个日期T1和T2之间或T1和T2之外的元素

来自分类Dev

Select ONE random row from Table1 where id does not exist in Table2

来自分类Dev

table1 在 table1.varchar 上连接 table2 等于 prefix+table2.numeric_id+suffix

来自分类Dev

表达式<Func <T1,T2,TResult >>和Sql IN

来自分类Dev

Impala SQL 在 t1 与 t2 上左连接

来自分类Dev

如果table2包含更多内容,则Oracle SQL联合table1与table2的结果为空

来自分类Dev

检查Table1中的字段组合是否在另一个Table2(SQL)中存在

来自分类Dev

Oracle SQL-从table1查找不存在table2条件的记录

来自分类Dev

如何从“ TABLE1 AND TABLE2”创建SELECT查询

来自分类Dev

选择 table1 和 table2 的计数

来自分类Dev

将table2中的所有行插入到table1中

来自分类Dev

将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

来自分类Dev

T-SQL - 比较两个表并将结果显示为在两者上都可用,仅 table1 和 table2

来自分类Dev

从由Table2加入的Table3更新Table1,但表2可能引用多个table3条目

来自分类Dev

SQL Server 管理工作室。更新 T1 设置 T1.Field1 = y 其中 T1.Field1= x 这会起作用吗?

来自分类Dev

将所有值从table1移到table2(带有1个新列)

来自分类Dev

将 T1 中当前不在 T2 中的所有行插入到 T2

来自分类Dev

sql中mysql中左连接的SQL查询中table1和table2中的主键不相同

来自分类Dev

从table1以及mysql中的table2中选择所有结果,其中两个表都有一个公共ID

Related 相关文章

  1. 1

    如果 table1 中的 table2 id 不为空,如何加入 table2

  2. 2

    SQL table1 row_id不显示table2 row_id

  3. 3

    SQL Server matching all rows from Table1 with all rows from Table2

  4. 4

    仅显示table1中与table2不同的字段(SQL Server 2008)

  5. 5

    SQL - 从 table2 更新 table1 值

  6. 6

    SQL Server:基于table1中的值在特定table2列中返回值

  7. 7

    mysql union select where table1 field3 = table2 field5

  8. 8

    显示来自table1的数据,其中其id(Table1 Id)未包含在table2中

  9. 9

    如何从table2中提取最接近table1的DATE FIELD的数据?

  10. 10

    创建一个sql查询以检索2个日期T1和T2之间或T1和T2之外的元素

  11. 11

    创建一个SQL查询以检索2个日期T1和T2之间或T1和T2之外的元素

  12. 12

    Select ONE random row from Table1 where id does not exist in Table2

  13. 13

    table1 在 table1.varchar 上连接 table2 等于 prefix+table2.numeric_id+suffix

  14. 14

    表达式<Func <T1,T2,TResult >>和Sql IN

  15. 15

    Impala SQL 在 t1 与 t2 上左连接

  16. 16

    如果table2包含更多内容,则Oracle SQL联合table1与table2的结果为空

  17. 17

    检查Table1中的字段组合是否在另一个Table2(SQL)中存在

  18. 18

    Oracle SQL-从table1查找不存在table2条件的记录

  19. 19

    如何从“ TABLE1 AND TABLE2”创建SELECT查询

  20. 20

    选择 table1 和 table2 的计数

  21. 21

    将table2中的所有行插入到table1中

  22. 22

    将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

  23. 23

    T-SQL - 比较两个表并将结果显示为在两者上都可用,仅 table1 和 table2

  24. 24

    从由Table2加入的Table3更新Table1,但表2可能引用多个table3条目

  25. 25

    SQL Server 管理工作室。更新 T1 设置 T1.Field1 = y 其中 T1.Field1= x 这会起作用吗?

  26. 26

    将所有值从table1移到table2(带有1个新列)

  27. 27

    将 T1 中当前不在 T2 中的所有行插入到 T2

  28. 28

    sql中mysql中左连接的SQL查询中table1和table2中的主键不相同

  29. 29

    从table1以及mysql中的table2中选择所有结果,其中两个表都有一个公共ID

热门标签

归档