【问题标题】:Mysql update column based on a string from another tableMysql 根据另一个表中的字符串更新列
【发布时间】:2013-08-24 16:43:40
【问题描述】:

如果表Customers 中的CustomerStatus 列等于字符串“Good - Prebook”,我需要更新名为Workorders 的表中名为PrebookCB 的列,并将其设置为1。我尝试了各种连接等,但似乎无法使其正常工作。这似乎是最接近的。每个客户会有多个工作订单。工作订单有一个名为 CustomerID 的列,它与名为 CustomerID 的客户主索引列相匹配

UPDATE Workorders
       JOIN Customers
       ON Workorders.CustomerID = Customers.CustomerID
SET    Workorders.PrebookCB = 1
WHERE  Customers.CustomerStatus = 'Good - Prebook'

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你试过了吗

    UPDATE Workorders SET PrebookCB = 1 
    WHERE CustomerID IN 
        (SELECT CustomerID FROM Customers 
        WHERE CustomerStatus = 'Good - Prebook')
    

    【讨论】:

    • 由于某种原因,0 行受到影响,但我知道 290 位客户的 CustomerStatus 为“Good - Prebook”。还有什么可能影响它?
    • 您可以运行“SELECT CustomerID FROM Customers WHERE CustomerStatus = 'Good - Prebook'”查询来检查您是否获得了这 290 行?
    【解决方案2】:

    试试这个,

    Update Workorders
    set prebookCB = 1
    where CustomerID in (select customerid from customers 
    where customeerstatus='Good-Prebook')
    

    在此,UPDATE 适用于您想要的表。 WHERE 通过比较子查询结果中出现的 customerID 过滤要更新的记录。子查询,进一步过滤并从客户表中选择 customerID,仅当他们具有 apt 状态时。

    希望这有助于解释!

    【讨论】:

    • 这个答案与 rakeshjain 的答案有何不同
    • 出于某种原因,0 行受到影响,但我知道 290 位客户的 CustomerStatus 为“Good - Prebook”。还有什么可能影响它?
    • @PraveenPrasannan ,我正在打字,当答案发布时,所以不知道。
    • @user2120901 ,我不能直接指出问题,因为我没有表的定义结构。另一方面,尝试确认 customerID 属性的完整性和等价性。 customerID 也应该等效地出现在 workorders 表中。如果可以,请提供有关表结构的更多详细信息。
    • 如果我删除最后一行 WHERE CustomerStatus ='Good-Prebook',然后它会更新所有 6,000 条记录,因此我知道 CustomerID 是匹配的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2014-10-20
    • 1970-01-01
    • 2017-07-24
    • 2011-11-25
    相关资源
    最近更新 更多