繁体   English   中英

在一个查询中从同一表进行UPDATE和SELECT

[英]UPDATE and SELECT from same table in one query

我正在尝试计算table1中的行,并根据行数来更新特定的列。 以下是我尝试过的查询,但收到一个错误消息,说temp不是表。

UPDATE table1 AS t1
INNER JOIN table1 AS temp ON temp.id = t1.id
SET
t1.field1 = (CASE
    WHEN (SELECT COUNT(*) FROM temp WHERE temp.field1 = 1) < 100 THEN 1
    WHEN (SELECT COUNT(*) FROM temp WHERE temp.field1 = 2) < 100 THEN 2
    WHEN (SELECT COUNT(*) FROM temp WHERE temp.field1 = 3) < 100 THEN 3
    WHEN (SELECT COUNT(*) FROM temp WHERE temp.field1 = 4) < 100 THEN 4
    WHEN (SELECT COUNT(*) FROM temp WHERE temp.field1 = 5) < 100 THEN 5
END)
WHERE t1.id IN(100, 200, 300); --Example data

几件事:

  1. 我建议在您的case语句中创建一个数据临时表,然后将其加入以进行更新。

  2. 重新加入要更新的表无法正常工作。

  3. 您的where子句中有语法错误。 IN之前不需要等号。

尝试:

DROP TABLE IF EXISTS temp_table1;
CREATE TEMPORARY TABLE temp_table1 AS
SELECT field1,count(*) as field_count FROM table1 group by field1;

UPDATE table1 AS t1
LEFT JOIN temp_table1 aa
  ON aa.field1= t1.field1
SET t1.field1 = (CASE 
  WHEN aa.field1 = 1 AND aa.field_count < 100 THEN 1 
  WHEN aa.field1 = 2 AND aa.field_count < 100 THEN 2 
  WHEN aa.field1 = 3 AND aa.field_count < 100 THEN 3 
  WHEN aa.field1 = 4 AND aa.field_count < 100 THEN 4 
  WHEN aa.field1 = 5 AND aa.field_count < 100 THEN 5 END)
WHERE t1.id IN (100, 200, 300); 

以下查询将对您有所帮助,

UPDATE table1 as t1
SET
t1.field1 = (CASE         
    WHEN (select p.cnt from (SELECT COUNT(*) as cnt FROM table1 t2 WHERE t2.field1= 1) as p) < 100 THEN 1
    WHEN (select p.cnt from (SELECT COUNT(*) as cnt FROM table1 t2 WHERE t2.field1= 2) as p) < 100 THEN 2
    WHEN (select p.cnt from (SELECT COUNT(*) as cnt FROM table1 t2 WHERE t2.field1= 3) as p) < 100 THEN 3
    WHEN (select p.cnt from (SELECT COUNT(*) as cnt FROM table1 t2 WHERE t2.field1= 4) as p) < 100 THEN 4
    WHEN (select p.cnt from (SELECT COUNT(*) as cnt FROM table1 t2 WHERE t2.field1= 5) as p) < 100 THEN 5    
 END)
WHERE t1.id IN(100, 200, 300)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM