更新查询中的MySQL子查询select语句

时间:2011-08-27 18:47:10

标签: mysql

我有2个表:tbl_taxclasses,tbl_taxclasses_regions

这是一对多关系,主记录ID为classid。 我在第一个表中有一个名为regionscount

的列

因此,我在表1中创建了一个Tax Class。然后我在表2中添加了region / states,将classid分配给每个区域。

我执行SELECT语句来计算具有相同classid的区域,然后使用该数字在tbl_taxclasses上执行UPDATE语句。我更新了regionscount列。

这意味着我正在编写2个查询。这很好,但我想知道是否有办法在UPDATE语句中执行SELECT语句,如下所示:

UPDATE `tbl_taxclasses` SET `regionscount` = [SELECT COUNT(regionsid) FROM `tbl_taxclasses_regions` WHERE classid = 1] WHERE classid = 1

我到达这里,因为我不确定MySQL有多强大,但我确实拥有最新版本,截至今天。 (5.5.15)

2 个答案:

答案 0 :(得分:0)

您可以使用非相关子查询为您完成工作:

UPDATE 
    tbl_taxclasses c 
INNER JOIN (
    SELECT 
        COUNT(regionsid) AS n 
     FROM 
        tbl_taxclasses_regions 
     GROUP BY 
        classid
) r USING(classid) 
SET 
    c.regionscount = r.n
WHERE
    c.classid = 1

答案 1 :(得分:0)

原来我猜对了。

这有效:

 UPDATE `tbl_taxclasses` 
 SET `regionscount` = (
      SELECT COUNT(regionsid) AS `num` 
      FROM `tbl_taxclasses_regions` 
      WHERE classid = 1) 
 WHERE classid = 1 LIMIT 1

我只需要用括号()替换括号[]。