当前位置: 首页 > 知识库问答 >
问题:

如何更新一列数据使用另一个表数据TSQL

包兴思
2023-03-14

我刚刚意识到我一直在为表中的一列捕获错误的数据。我已经修复了这个问题,但是,到目前为止我捕获的数据仍然不正确。

让我们将我的表命名为TableIWantToCorrecttablewithid

TableIWantToCorrect中,我有一个外键,指向TableWithIDs。这是不正确的。

我可以通过比较表I中要更正的列的子字符串表ID中的列来更正数据。

所以现在我有

表1希望更正

Name            ForeignKey
123-abc-123        15
456-def-456        15
789-ghi-789        15

####################################################################################

CompareName    id
abc            1
def            2
ghi            3

因此,当名称中的子字符串等于比较名称中的子字符串时,我想更新TableIWantToCorrect以获得正确的ForeignKey值。子字符串的位置始终相同,因此我可以使用substring方法。

我的尝试:

Update TableIWantToCorrect
SET ForeignKey =
       (SELECT id 
        FROM TableWithIDs 
        WHERE UPPER(CompareName) = UPPER((SUBSTRING(TableIWantToCorrect.Name, 4, 3)))

结果是:

子查询返回了多个值。当子查询后跟=、!=、时,不允许这样做,

我知道我做了些傻事。我在这里做错了什么?

共有3个答案

葛浩阔
2023-03-14
--CREATE FUNCTION dbo.ufn_FindReports 
--(@InEmpID INTEGER)
--RETURNS @retFindReports TABLE 
--(
--    EmployeeID int primary key NOT NULL,
--    FirstName nvarchar(255) NOT NULL,
--    LastName nvarchar(255) NOT NULL,
--    JobTitle nvarchar(50) NOT NULL

--)
----Returns a result set that lists all the employees who report to the 
----specific employee directly or indirectly.*/
--AS
--BEGIN
--WITH EMP_cte(EmployeeID, OrganizationNode, FirstName, LastName, JobTitle, RecursionLevel) -- CTE name and columns
--    AS (
--        SELECT e.EmployeeID, e.ManagerID, p.FirstName, p.LastName, P.JobTitle, 0 -- Get the initial list of Employees for Manager n
--        FROM HumanResources.Employee e 
--INNER JOIN Person.Person p 
--ON p.Employeeid = e.EmployeeID
--        WHERE e.EmployeeID = @InEmpID
--        UNION ALL
--        SELECT e.EmployeeID, e.ManagerID, p.FirstName, p.LastName, P.JobTitle, RecursionLevel + 1 -- Join recursive member to anchor
--        FROM HumanResources.Employee e 
--            INNER JOIN EMP_cte
--            ON e.ORGANIZATIONNODE.GetAncestor(1) = EMP_cte.OrganizationNode
--INNER JOIN Person.Person p 
--ON p.Employeeid= e.EmployeeID
--        )
---- copy the required columns to the result of the function 
--   INSERT @retFindReports
--   SELECT EmployeeID, FirstName, LastName, JobTitle, RecursionLevel
--   FROM EMP_cte 
--   RETURN
--END;
--GO

>
扈昀
2023-03-14
 Update TableIWantToCorrect
 SET ForeignKey =  s.id
 FROM TableIWantToCorrect , TableWithIDs as s
 WHERE UPPER(s.CompareName) = UPPER( (SUBSTRING(TableIWantToCorrect.Name, 4, 3))
吕霖
2023-03-14

错误是因为您的子查询正在为UPDATE返回多个记录。要解决这个问题,您可以使用JOIN与您的UPDATE一起执行此操作。

UPDATE t1
SET ForeignKey = t2.id
FROM TableIWantToCorrect t1
INNER JOIN TableWithIDs t2
    ON UPPER(t2.CompareName) = UPPER(SUBSTRING(t1.Name, 4, 3))
 类似资料:
  • 如何使用Pandas更新/组合/合并数据帧(df1)和来自另一个数据帧(df2)的值,其中df1有一个新列(col3)和来自df2的值。可乐2?换句话说,df1是当前月份的值,我希望df1也有一个来自df2的列,它是上个月的值。 任何关于这方面的见解都是值得赞赏的;非常感谢你。 DF1: DF2: 所需df:

  • 问题内容: 我在SQLite中有两个表,看起来像这样 我试图编写查询以基于表Y中的记录更新表X上的记录。更新的条件如下所示 但是当我尝试这样做时,我收到一条错误消息,说 没有这样的列:table_y.c2 问题答案: 删除的答案关于错误的原因是正确的:必须在查询中 引入 关系标识符(例如,使用FROM / JOIN),然后才能使用它。 虽然SQLite的不 不 支持(因此没有办法直接引入查找关系)

  • 问题内容: 是否可以在带有子选择的mysql 5.0上运行UPDATE命令。 我要运行的命令是这样的: ISBN13当前存储为字符串。 这应该更新10k +行。 谢谢, 威廉 问题答案: 只需更改一下即可:

  • 问题内容: 表格1: 表2: 在oracle SQL中,如何运行 sql更新 查询,该查询可以使用表2并使用表2来更新表1 ?所以我得到的最终结果是 表格1: 问题答案: 这称为相关更新 假设联接导致键保留视图,您还可以

  • 我有两个数据帧。我需要用第二列中的平均值更新第一列中的一列,并按索引分组。这里是示例df1(col1是索引) df2(col1是索引) 我需要df2的col2(a=2,d=3)的平均值,并且只更新col3=X的行的df1 我试过这个 只有在我不使用loc的情况下,它才有效。 我试图得到的结果是df1(col1是索引)

  • 问题内容: 我有两个Spark数据框: 数据框A: 和数据框B: 数据框B可以包含来自数据框A的重复行,更新行和新行。我想在spark中编写操作,在其中可以创建一个新数据框,其中包含数据框A的行以及数据框B的更新行和新行。 我首先创建一个仅包含不可更新列的哈希列。这是唯一的ID。所以我们可以说,并可以改变值(可更新),但是是唯一的。我创建了一个哈希函数为: 现在,我想编写一些火花代码,基本上从B中

  • 我有一个目标表(已经填充了数据)和另一个(源表),我需要将数据检索到第一个。 目标_表格 source_table 我需要使用 tusers 表中的 id 更新 ttasks 表id_user列,因此 ttasks 的最终结果应该是: 我尝试过的(类似于INSERT… from…语句): 但是这个查询总是使用我的q1子查询中的第一个id。 关于我如何完成这项任务,有什么想法、帮助甚至解决方案吗?非

  • 问题内容: 我有一张桌子,看起来像这样 我正在寻找一种方法,以使用“ VALUE”列中其他行中具有相同“ NAME”的数据更新值“ Test2”和“ Test”(此处ID并非唯一,ID的复合键和NAME成为唯一的一行)。例如,我正在寻找的输出是: 如果在另一个表中,我会没事的,但是我对于如何使用相同的NAME值引用当前表中的另一行感到困惑。 更新资料 修改完manji查询后,下面是我用于有效解决方