【问题标题】:MySQL. Update table all rows for specific columns by subquery that takes input value from each rowmysql。通过从每行获取输入值的子查询更新表中特定列的所有行
【发布时间】:2015-09-01 15:54:16
【问题描述】:

这是一个挑战: 我有三张桌子。 我需要用查询结果填充 table_1。 此查询的输入是 table_1 的 id。我该怎么做?

谢谢。

我已经试过了

UPDATE  table_1 AS a 
           INNER JOIN
           (
               SELECT  s.some_name 
               FROM    table_2 as st
               JOIN table_3 AS s ON s.a_id = st.a_id 
               ORDER BY st.somefiled DESC
               LIMIT 1 
           ) AS b ON  a.a_id = b.a_id AND a.t_id = b.t_id 
           SET     a.some_name = b.some_name

但这给了我错误

1054 - “on 子句”中的未知列“b.a_id” 虽然,a_id 存在于 table_2 和 table_3 中

提前谢谢你

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您还没有这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。在这种情况下,这可能是查询前后表的外观示例。
  • 您还必须在选择列表中指定 Id 列。
  • @Strawberry 感谢您的帮助。我认为 Ankit 已经回答了这个问题。
  • 您有权发表自己的观点。

标签: mysql sql


【解决方案1】:

您还必须在选择列表中指定 Id 列。像这样的东西:-

UPDATE  table_1 AS a 
       INNER JOIN
       (
           SELECT  s.some_name, st.a_id, st.t_id
           FROM    table_2 as st
           JOIN table_3 AS s ON s.a_id = st.a_id 
           ORDER BY st.somefiled DESC
           LIMIT 1 
       ) AS b ON  a.a_id = b.a_id AND a.t_id = b.t_id 
       SET     a.some_name = b.some_name

我不知道这是否解决了您的目的。但这将消除错误

【讨论】:

  • 似乎有效。它现在显示的唯一内容3 - Error writing file '/tmp/MYMN0O77' (Errcode: 28 - No space left on device)。所以我仍然无法完成查询(((即使我在 table_1 中只有 1 行也是如此
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2023-03-31
  • 2019-09-07
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多