【问题标题】:Update query with Join SQL Server使用 Join SQL Server 更新查询
【发布时间】:2018-11-27 10:29:48
【问题描述】:

我有这两张桌子

第一张图片代表ObjectData表格,第二张图片代表ColumnsSet表格。

ObjectData中的ColID属性代表ColumnsSet表中ColumnID的外键。

我想更新 ObjectData 的数据属性中的一个单元格,例如数字 10 为 20。

查询:

UPDATE ObjectData SET ObjectData.Data = 'Ahmed'
FROM ColumnsSet
INNER JOIN ObjectData ON ColumnsSet.ColumnID = ObjectData.ColID
WHERE ObjectData.ColID = ColumnsSet.ColumnID

什么是正确的 SQL 语句?

【问题讨论】:

  • 我已经尝试过这个例子,但它仍然不起作用这是我的查询“UPDATE ObjectData SET ObjectData.Data = 'Ahmed' FROM ColumnsSet INNER JOIN ObjectData ON ColumnsSet.ColumnID = ObjectData.ColID WHERE ObjectData. ColID = ColumnsSet.ColumnID"
  • 同样的问题,所有数据单元都更新为新值'Ahmed'。我只想要一个细胞
  • 请在问题中添加任何相关信息,以及您尝试过的任何事情,而不是在 cmets 中。
  • 将更新表移动到第一个 UPDATE od SET od.Data = 'Ahmed' FROM ObjectData od INNER JOIN ColumnsSet cs ON cs.ColumnID = od.ColID WHERE od.ColID = cs.ColumnID

标签: sql-server database join


【解决方案1】:
UPDATE a SET a.Data = 'Ahmed'
FROM ObjectData  a 
INNER JOIN ColumnsSet  ON ColumnsSet.ColumnID = a.ColID

当您使用内部连接时,它会选择返回连接条件为真而不是空数据的数据 没有必要“在哪里......” 但你必须确定哪些数据会更新 首先使用此代码并选择所有数据

SELECT * 
FROM ObjectData  a 
INNER JOIN ColumnsSet  ON ColumnsSet.ColumnID = a.ColID

然后写where子句 然后将其更改为更新

【讨论】:

    【解决方案2】:

    让我举例说明如何更新。 首先,我们应该创建表:

    CREATE TABLE ObjectData
    (
         ID INT,
         CollID INT,
         Data VARCHAR(50)
    )
    
    CREATE TABLE ColumnSet
    (
         ColumnID INT,
         ColumnName VARCHAR(50)
    )
    

    然后插入数据:

    INSERT INTO ObjectData
    (
        ID,
        CollID,
        Data
    )
    VALUES
    (   113, -- ID - int
        1, -- CollID - int
        '1' -- Data - varchar(50)
        )
    , (114, 5, '')
    , (115, 10015, 'Mohamed')
    , (116, 20026, 'Abdulghani')
    
    INSERT INTO ColumnSet
    (
        ColumnID,
        ColumnName
    )
    VALUES
    (   1, -- ColumnID - int
        'ID' -- ColumnName - varchar(50)
        )
    , (5, 'EmployeeID')
    , (10015, 'FirsName')
    

    最后一步是更新你应该写哪些行需要由WHERE操作员更新:

    UPDATE od
     SET od.Data = 'Hey!'
    FROM ObjectData  od 
    INNER JOIN ColumnSet cs ON cs.ColumnID =od.CollID
    --WHERE OD.DATA IN ('1', '10')
    WHERE OD.CollID IN (1, 5)
    

    您可以在WHERE 语句中写入任何条件来选择要更新的行。

    --Check our update statements:
    SELECT
    *
    FROM ObjectData  od 
    INNER JOIN #ColumnSet cs ON cs.ColumnID =od.CollID
    WHERE OD.DATA IN ('1', '10')
    

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多