Mysql - UPDATE表SET列= SELECT COUNT(*)FROM(SELECT * FROM table2 WHERE table2.id = table.id))不可能

时间:2014-01-03 00:11:48

标签: php mysql innodb mariadb

我有两个包含大量行的表,我需要为第一行(table_1)中的每一行维护“索引”信息。所以我写了一个查询,不直接使用COUNT()[慢,慢,慢]。所以我试试:

UPDATE table_1 SET table_1.column_3 = (  
    SELECT COUNT(*) FROM (
        SELECT DISTINCT column_5 FROM table_2 WHERE table_2.id_t1 = table_1.id LIMIT 300
    ) t
)

但MySQL回答我,table_1.id在where子句(#1054)

中是未知的

您是否知道如何在where子句中传递table_1.id?或者其他方式来实现我的目标?

感谢您帮助我!

1 个答案:

答案 0 :(得分:2)

问题是因为table_1离内部查询太远,使用:

UPDATE table_1 SET table_1.column_3 = 
(SELECT count(DISTINCT column_5) FROM table_2 WHERE table_2.id_t1 = table_1.id);

因为我看到你正在使用LIMIT,不确定你是否需要它,无论如何你可以效仿它:

IF(count(distinct column_5)>300, 300, count(distinct column_5))