插入多选或多条件

时间:2015-09-16 15:24:42

标签: mysql group-by

我有一个包含许多信息的表:

 CREATE TABLE sequences (
    `id` INT(11) NOT NULL DEFAULT '0',
    `name` TEXT NULL,enter code here    
    `nbrlsu` BIGINT(20) NULL DEFAULT NULL,
    `nbrits` BIGINT(20) NULL DEFAULT NULL,
    `nbrco1` BIGINT(20) NULL DEFAULT NULL,
    `nbrrcbl` BIGINT(20) NULL DEFAULT NULL,
    `nbrmatk` BIGINT(20) NULL DEFAULT NULL,
    `nbrsequences` BIGINT(20) NULL DEFAULT NULL,   
    `parent_id` BIGINT(20) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)  
        );

我想根据第一个表中的列总和创建一个表 例如,我想知道具有相同parent_id并且numberequences> 0的元素数量 我想知道每种类型的序列包含信息的行数:

SELECT parent_id ,
       Classification,count(id) as nbrspecies,
       SUM(nbrsequences) ,
       SUM(nbrco1),
       SUM(nbrits),
       SUM(nbrlsu),
       SUM(nbrrcbl),
       SUM(nbrmatk)  
FROM dashboard_specimen 
GROUP BY parent_id

我还有其他类型的问题:

SELECT parent_id ,
       count(id) as co1  
FROM dashboard_specimen 
WHERE nbrco1>0     
GROUP BY parent_id ;

SELECT parent_id ,
       count(id) as nbrspecies  
FROM dashboard_specimen 
WHERE nbrsequences>0 
GROUP BY parent_id 

和其他类似的 我最终的目标是将这些信息插入另一个带有insert select的表中 像这样:

INSERT INTO bold_namestats (id,
                            name,
                            numberofstrains, 
                            numberofsequences,
                            numberofco1,
                            numberofits,
                            numberoflsu,
                            numberofrbcl,
                            numberofmatk)
SELECT parent_id ,
       Classification,
       count(id) as nbrspecies,
       SUM(nbrsequences) ,
       SUM(nbrco1),
       SUM(nbrits),
       SUM(nbrlsu),
       SUM(nbrrcbl),
       SUM(nbrmatk)  
FROM dashboard_specimen 
GROUP BY parent_id

我不知道是否有一种简单的方法可以使用临时表或类似的东西

2 个答案:

答案 0 :(得分:0)

如果我理解的话,您可以为要填充的每个列执行子查询,过滤每个子查询以获取ID。

INSERT INTO bold_namestats (id,
                            name,
                            numberofstrains, 
                            numberofsequences,
                            numberofco1,
                            numberofits,
                            numberoflsu,
                            numberofrbcl,
                            numberofmatk)
select parent_id, (*select1* where parent_id=...), (*select2*  where parent_id=...), ... , (*selectn*  where parent_id=...)
from dashboard_specimen
group by parent_id

其中 select1 select2 ,..., selectn 是您的不同查询。

答案 1 :(得分:0)

最后,我使用连接和临时表解决了我的问题

INSERT INTO bold_namestats (_id,numberofstrains, numberofsequences,numberofco1,numberofits,numberoflsu,numberofrbcl,numberofmatk,numberstrainswithco1,numberstrainswithseq) 
SELECT a._id ,a.numberofstrains,a.numberofsequences ,a.numberofco1,a.numberofits,a.numberoflsu,a.numberofrbcl,a.numberofmatk,b.numberofstrainswithco1,c.numberofstrainswithseq  FROM bold_temp_namestats a    left join bold_strainswithco1 b on a._id=b.parent_id left join bold_strainswithseq c on a._id=c.parent_id union 
SELECT a._id ,a.numberofstrains,a.numberofsequences ,a.numberofco1,a.numberofits,a.numberoflsu,a.numberofrbcl,a.numberofmatk,b.numberofstrainswithco1,c.numberofstrainswithseq   FROM bold_temp_namestats a    right join bold_strainswithco1 b on a._id=b.parent_id left join bold_strainswithseq c on a._id=c.parent_id ;

这个查询用于替换完整的外连接,所以我用数据填充3个表,之后我用joinin结果插入左右连接并将结果联合起来,最后得到完整的行