【问题标题】:SQL Server : update a table based on the result of another table with substringSQL Server:根据带有子字符串的另一个表的结果更新表
【发布时间】:2016-10-18 00:58:00
【问题描述】:

我的数据库中有 2 个表,其中一个包含一个 Description 和一个 Code

表_1

Description  |  Code
--------------------
123 street      23
321 street2     12
342 blabla      1

另一个表有一个Id列和一个描述列

表_2

Id  |  Description
------------------------------  
41     street (textidontwant)
22     street2 (textidontwant)
33     blabla (textidontwant)

基本上,我想做的是用表 2 中的 Id 更新表 1 中的 Code,但是我需要使用子字符串来修剪表 2 中的描述,以便匹配文本与表 1 中的描述。

子查询我已经写好了,如下:

SELECT LEFT([Description], CHARINDEX('(', [Description]) - 1)) FROM Table_2

这里可以很好地修剪括号内的文本,但问题是我似乎无法使用 Table_2 中的 Id 更新 Table_1 代码列

我试过这样做:

UPDATE Table_1
SET Code = (SELECT T2.Id FROM Table_2 T2)
WHERE Table_1.[Description] = (SELECT LEFT([Description], CHARINDEX('(', [Description]) - 1)) FROM Table_2)

但我收到此错误:

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

有什么想法吗?

感谢您的帮助!

【问题讨论】:

    标签: sql-server sql-update substring


    【解决方案1】:

    不要使用子查询。 Sql server 允许你在更新语句中使用 Joins。

    UPDATE T1
    SET Code = T2.Id
    FROM Table_1 T1 
    INNER JOIN Table_2 T2 
        ON T1.[Description] = LEFT(T2.[Description], CHARINDEX('(', T2.[Description]) - 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      相关资源
      最近更新 更多