Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询将SELECT计数从一个表逐行插入到另一个表_Mysql_Sql - Fatal编程技术网

Mysql SQL查询将SELECT计数从一个表逐行插入到另一个表

Mysql SQL查询将SELECT计数从一个表逐行插入到另一个表,mysql,sql,Mysql,Sql,我很难找到正确的SQL查询。如图所示,我有两个表格“Table_1”和“Table_2”,分别列为“Vehicles”和“IMMATRICULATION”和“NOMBRE”。在表_2中,我想在“Nombre”列中插入表_1中车辆CarA、CarB和CarC的计数值,这些数值与图中相同 我尝试了下面的查询,但它添加了一个值,而不是将它放在同一行的CarA,CarB INSERT INTO Table_2 (NOMBRE) VALUES ((SELECT COUNT(*) FROM Tabl

我很难找到正确的SQL查询。如图所示,我有两个表格“Table_1”和“Table_2”,分别列为“Vehicles”和“IMMATRICULATION”和“NOMBRE”。在表_2中,我想在“Nombre”列中插入表_1中车辆CarA、CarB和CarC的计数值,这些数值与图中相同

我尝试了下面的查询,但它添加了一个值,而不是将它放在同一行的CarA,CarB

INSERT INTO Table_2 (NOMBRE)
    VALUES ((SELECT COUNT(*) FROM Table_1 WHERE VEHICULES = 'CarA'),
            (SELECT COUNT(*) FROM Table_1 WHERE VEHICULES = 'CarB'),
            (SELECT COUNT(*) FROM Table_1 WHERE VEHICULES = 'CarC')
           );

首先生成select查询,返回要插入到新表中的值,然后在开头添加INSERT into。GROUPBY子句也是您缺少的

这里有一个例子

INSERT INTO Table_2 (Name, Cnt)
select VEHICULES, count(*)
from Table_1
group by VEHICULES
您似乎想要更新,而不是插入:

显然,您需要更新,而不是插入,如果您使用的是MSSQL Server,这是您收到的错误文本所建议的,那么请使用以下语句:

WITH t AS
(
 SELECT vehicules, COUNT(*) AS cnt
   FROM table_1
  GROUP BY vehicules 
)
UPDATE table_2
   SET nombre = cnt
  FROM t
 WHERE immatriculation = vehicules

像那样在表2中插入标称值,从表1中选择计数,其中车辆='CarA',从表1中选择计数,其中车辆='CarB',从表1中选择计数*,其中车辆='CarC';按车辆分组;不,您根本不需要指定where子句。您只需要按语句分组,它将对该列中的所有值进行计数。您所需要的就是我上面列出的SQL示例,它将自动插入车辆和计数的正确值。好的,我明白了!但是否可以在不每次添加新值的情况下对其进行更新?我的意思是将CarA、CarB和CarC保留在表2中,并仅更改列nombre的值。在这种情况下,使用update-INTO而不是INSERT-INTO。然后将更新这些记录。下面的戈顿答案更完整!我有这个;Msg 102,Niveau 15,État 1,Ligne 1“t2”附近的语法不正确。Msg 102,Niveau 15,État 1,Ligne 5“t1”附近的语法不正确。您的问题被标记为MySQL,但该错误看起来像SQL Server。您真正使用的是什么数据库?请参阅
WITH t AS
(
 SELECT vehicules, COUNT(*) AS cnt
   FROM table_1
  GROUP BY vehicules 
)
UPDATE table_2
   SET nombre = cnt
  FROM t
 WHERE immatriculation = vehicules