MySQL结合了UPDATE和SELECT查询

时间:2014-07-20 12:38:34

标签: mysql sql sql-update

我有以下返回数据的SELECT语句,例如:

SELECT performers.ID, 
       performers.Name, 
       COUNT(*) AS CountOfDeals, 
       COUNT(DISTINCT(deals.Name)) AS CountOfAliases 
  FROM deals RIGHT JOIN performers 
               ON deals.name LIKE CONCAT('%', performers.name, '%') 
 WHERE performers.ID IN ( 27952, 27951, 27950, 27949, 27948 ) 
 GROUP BY Name;

返回示例数据:

  ID        Name             CountOfDeals     CountOfAliases
27952   Christine Hoberg          1                 0
27951   Indian Jewelry            1                 0
27952   Kinky Friedman            5                 3
27949   KJ-52                     1                 0
27960   River Whyless             1                 0

我想将此与以下UPDATE语句

结合使用
UPDATE performers 
   SET RawAliasCount = CountOfAliases, 
       RawDealCount = CountOfDeals 
 WHERE ID = ?

运行update语句所需的所有值都在上面的select语句中返回,所以希望这很容易。

感谢。

2 个答案:

答案 0 :(得分:4)

updatejoin

一起使用
UPDATE performers p JOIN
       (SELECT performers.ID, performers.Name, COUNT(*) AS CountOfDeals, 
               COUNT(DISTINCT(deals.Name)) AS CountOfAliases 
        FROM deals RIGHT JOIN
             performers
             on deals.name LIKE CONCAT('%', performers.name, '%') 
        WHERE performers.ID IN (27952, 27951, 27950, 27949, 27948) 
        GROUP BY Name
       ) pp
       ON pp.id = p.id
    SET RawAliasCount = pp.CountOfAliases,
        RawDealCount = pp.CountOfDeals;

答案 1 :(得分:0)

UPDATE  performers
SET performers.RawAliasCount = count_table.CountOfAliases, performers.RawDealCount = count_table.CountOfDeals
FROM   performers
        INNER JOIN
        (
            SELECT 
            performers.ID, performers.Name, COUNT(*) AS CountOfDeals, 
            COUNT(DISTINCT(deals.Name)) AS CountOfAliases 
            FROM deals RIGHT JOIN performers on deals.name LIKE CONCAT('%', performers.name, '%') 
            WHERE performers.ID IN (27952, 27951, 27950, 27949, 27948) 
            GROUP BY Name
        ) count_table
ON count_table.ID = performers.ID;

当提出这类问题时,感谢您放置表格架构。

编辑:对不起,这是sql-server语法。