【问题标题】:MySQL UPDATE with SELECT statement - convert to JOIN带有 SELECT 语句的 MySQL UPDATE - 转换为 JOIN
【发布时间】:2021-10-17 00:14:48
【问题描述】:

问题:MySQL - 获取 Batting 中每个 PersonID 的 IBB 总和,并更新 Batting_Career 中每个 PersonID 的 IBB

有人可以帮我弄清楚 JOIN 吗?

我有什么不工作:

UPDATE Batting_Career
SET Batting_Career.IBB = Batting.IBB WHERE PersonID IN 
  ( SELECT DISTINCT
        PersonID,
        SUM(IBB) AS IBB
    FROM
        Batting 
     GROUP BY PersonID )
AND Batting_Career.PersonID = Batting.PersonID;

Batting select 语句有效 (...) - 它让我得到 IBB 列中所有 playerID 的 IBB 总和,但是当我使用它添加到更新时它不起作用。

我得到的错误是

操作数应包含 1 列

我相信规则是您只能从此类查询中选择一列。这意味着我可能必须加入表格。谁能帮我解决这个问题?

【问题讨论】:

    标签: mysql join select subquery multiple-columns


    【解决方案1】:

    Batting聚合并加入Batting_Career

    UPDATE Batting_Career bc
    JOIN (
      SELECT PersonID, SUM(IBB) as IBB  
      FROM Batting 
      GROUP BY PersonID
    ) b ON b.PersonID = bc.PersonID
    SET bc.IBB = b.IBB;
    

    【讨论】:

      【解决方案2】:

      我已经写了一个查询可以完成你的工作:)

      UPDATE Batting_Career t2
      SET t2.IBB = t1.IBB where PersonID IN (
         SELECT
              PersonID,
              SUM(IBB) AS IBB
          FROM
              Batting
          WHERE
              PersonID IN(
              SELECT DISTINCT
                  PersonID
              FROM
                  Batting
          )
      GROUP BY
          PersonID
      ) t1
      WHERE
          t2.PersonID = t1.PersonID;
      

      【讨论】:

      • 我试过这个并得到以下错误:分析过程中发现2个错误。这种类型的子句以前被解析过。 (在位置 301 的“WHERE”附近)无法识别的语句类型。 (在位置 301 的“WHERE”附近)。基本上它不喜欢最后一个 WHERE 子句:WHERE t2.PersonID = t1.PersonID;
      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多