代码之家  ›  专栏  ›  技术社区  ›  Musikdoktor

Mysql根据另一个查询的结果更新查询集

  •  1
  • Musikdoktor  · 技术社区  · 7 年前

    我被这个困住了。。 我提出了一个问题。。。

        SELECT ID_Rollo, ID_Rollo_Original
    FROM 
        interpretes 
        LEFT JOIN (
            SELECT ID_Rollo_Original, ID_Rollo, count(ID_Rollo) as count
            FROM rollooriginal 
            GROUP BY rollooriginal.ID_Rollo
            HAVING count = 1
        ) rollooriginal ON  interpretes.ID_Programa = rollooriginal.ID_Rollo
    WHERE 
    interpretes.ID_Prog IS NULL AND ID_Rollo IS NOT NULL
    

    返回如下内容:

    ID_Rollo:  ID_Rollo_Original
    78 ------- 656
    88 ------- 5012
    

    另一方面,我有一张桌子 翻译 和一些可乐。

    ID_table: ID_Programa: ID_Prog: etc: etc:
    1 ------- 78 -------- NULL ------
    2 ------- 88 -------- NULL ------
    3 ------- 642 ------- 2108 ------
    etc....
    

    在某些情况下,ID\u Prog为NULL,我需要做的是创建查询来更新表 翻译 如果ID\u Prog为NULL,则将ID\u Rollo\u Original的结果复制到ID\u Prog。。

    请注意,ID\u Rollo来自查询,ID\u Programa来自 翻译 是相等的。

    预期

    ID_table: ID_rollo: ID_Prog: etc: etc:
    1 ------- 78 ------ 656 ------
    2 ------- 88 ------ 5012 ------
    

    像这样的。。。

    更新解释集解释。ID\u Prog=(ID\u Rollo\u Original)其中 翻译。ID\u Programa=(结果ID\u Rollo)和解释。ID\u程序为 无效的

    1 回复  |  直到 7 年前
        1
  •  1
  •   ScaisEdge    7 年前

    可能正在对子查询使用联接

    UPDATE interpretes  a 
    INNER  JOIN (
        SELECT ID_Rollo, ID_Rollo_Original
        FROM interpretes 
        LEFT JOIN (
                SELECT ID_Rollo_Original, ID_Rollo, count(ID_Rollo) as count
                FROM rollooriginal 
                GROUP BY rollooriginal.ID_Rollo
                HAVING count = 1
            ) rollooriginal ON  interpretes.ID_Programa = rollooriginal.ID_Rollo
        WHERE interpretes.ID_Prog IS NULL AND ID_Rollo IS NOT NULL
      ) T on t.ID_ROLLO = a.ID_ROLLO 
      SET a.ID_Prog = t.ID_Rollo_Original
      WHERE a.ID_Prog is NULL