我有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)
答案 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
我只需要用括号()替换括号[]。