【问题标题】:SQL query INSERT SELECT COUNT from one table to another row by rowSQL 查询 INSERT SELECT COUNT 从一张表逐行插入另一张表
【发布时间】:2021-01-24 21:45:21
【问题描述】:

我无法找到正确的 SQL 查询。正如您在图片中看到的,我有两个表('Table_1' 列'VEHICULES')和('Table_2' 列'IMMATRICULATION' 和'NOMBRE')。在 Table_2 中,我想在列 ('Nombre') 中插入来自 VEHICULE 的 Table_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')
           );

【问题讨论】:

标签: mysql sql


【解决方案1】:

首先生成返回要插入到新表中的值的选择查询,然后在开头添加 INSERT INTO。 group by 子句也是您所缺少的。

这是一个例子

INSERT INTO Table_2 (Name, Cnt)
select VEHICULES, count(*)
from Table_1
group by VEHICULES

【讨论】:

  • 喜欢吗? : 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'));按车辆分组;
  • 不,您根本不需要指定 where 子句。您只需要按语句分组,它将计算该列“VEHICULES”中的所有值。您只需要我上面列出的 SQL 示例,它会自动为车辆和计数插入正确的值。
  • 好的,我明白了!但是是否可以在不每次添加新值的情况下对其进行更新?
  • 我的意思是将 CarA、CarB 和 CarC 保留在 table_2 中并仅更改 NOMBRE 列的值
  • 在这种情况下,请使用 UPDATE INTO 而不是 INSERT INTO。然后将更新这些记录。下面的戈登回答更完整!
【解决方案2】:

你似乎想要update,而不是insert

update table_2 t2 join
       (select vehicules, count(*) as cnt
        from table_1
        group by vehicules
       ) t1
       on t2.immatriculation = t1.vehicules
    set nombre = t1.cnt;

【讨论】:

  • 我有这个; Msg 102、Niveau 15、État 1、Ligne 1 't2' 附近的语法不正确。 Msg 102、Niveau 15、État 1、Ligne 5 't1' 附近的语法不正确。
  • 您的问题被标记为 MySQL,但该错误看起来像 SQL Server。你真正使用的是什么数据库?
【解决方案3】:

显然你需要update,而不是insert,如果你使用的是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

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多