【问题标题】:MySQL Update statement after adding extra condition at WHERE在 WHERE 添加额外条件后的 MySQL 更新语句
【发布时间】:2023-04-01 03:18:01
【问题描述】:

我有这个 MySQL 更新语句。它工作正常。

UPDATE Table1
SET Table1_field1='field1_content', Table1_field2='field2_content'
where Table1_field3=2 

以上所有字段都属于同一张表。然后我在 WHERE 子句中添加了一个额外的条件AND Table2.fieldname='XXX'

UPDATE Table1
SET Table1_fieldname1='field1_content', Table1_fieldname2='field2_content'
where Table1_fieldname3=2 AND Table2.fieldname='XXX'

这一次,SQL 语句失败。错误是“where 子句中的未知列Table2.fieldname”。但是,Table2.fieldname 确实存在。

【问题讨论】:

  • 你用什么条件来组合Table1Table2
  • 阅读更新...加入...
  • 表2?您可能需要加入这两个表

标签: mysql sql


【解决方案1】:

为了能够在查询中使用 Table2 中的字段,您需要在 Table1 和 Table2 之间使用 JOIN。

JOIN 根据提供的条件有效地将每个表中的一行组合成一行供您的查询使用。 例如,如果 Table1 和 Table2 都有一个 tableID 列,我们可以组合每个 tableID 匹配的行。 查询将如下所示:

UPDATE Table1
JOIN Table2
    ON Table1.tableID = Table2.tableID
SET Table1_fieldname1='field1_content', Table1_fieldname2='field2_content'
WHERE Table1_fieldname3=2 AND Table2.fieldname='XXX';

JOIN 关键字等同于 INNER JOIN。有不同类型的 JOIN 可用,我建议阅读它们。 这是一张参考图片,可让您了解不同类型:

【讨论】:

    【解决方案2】:

    你需要连接表1和表2;那你就可以更新了

    UPDATE Table1 AS b
    INNER JOIN Table2 AS g ON b.id = g.id SET Table1_fieldname1='field1_content', Table1_fieldname2='field2_content'
    where Table1_fieldname3=2 AND g.fieldname='XXX'
    

    【讨论】:

    • b.id是Table2的主键,g.id是Table1的主键?如果表中不存在 id 列,此代码是否仍然有效?
    • 不,我只是将其添加为示例,您必须使用首选列加入它
    • 现在更好地理解。我需要看看外键关系。
    • 是的,它有效。谢谢。如果您不介意,我选择了另一个答案作为答案,因为它包含更多解释。
    猜你喜欢
    • 2014-09-13
    • 2013-09-07
    • 2021-07-22
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多