使用查询结果计算查询

时间:2014-01-10 11:14:24

标签: mysql sql oracle-sqldeveloper

我有以下问题。

我有这个SQL查询:

select id, tableid 
    from sysclass 
    where id in (
        select contentid 
            from sysclassgroupcontent 
            where groupid = 5 AND contenttype != 1
        );

结果是例如:

ID   TableID
1    200
2    300
3    200

现在我想在此查询中插入这些特定表中有多少项,其中id等于id和tableid

代码:

select Count(*) from xxx where classid = yyy;

XXX就是例如200和yyy是死ID,例如1或2。

结果应该如下:

ID   TableID   Count
    1    200   1020
    2    300   50021
    3    200   13

这是表结构:

表SysClasss:

  • ID(PK)
  • TableId(FK - 参考SysTable.Id)

表SysClassContents:

  • Id(PK)
  • GroupId(FK引用SysClassGroup.Id)
  • ContentID(FK - regering to SysClass.Id)

表SysClassGroup:

  • ID(PK)

表SysTable:

  • ID(PK)
  • 名称(这些是我想要计算的不同表的名称),例如tabelID = 200 == LvElements

现在我想在表中计算LVElements所有具有classid = 1的项目,如果它在Sysclassgroup = 5中 这可能在一个查询中以及如何实现?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为你需要

GROUP BY ID

它会给你想要的结果

答案 1 :(得分:0)

嗯,我认为唯一的方法是使用mysql程序,因为它不可能直接在语句中使用“动态”表名。

尝试类似的事情:

编辑 - 添加分隔符行:

delimiter //     
CREATE PROCEDURE getTableCount(IN argTableName CHAR(64), IN argClassid CHAR(64))
    BEGIN
        SET @s = CONCAT('SELECT count(*) FROM XP_net.',argTableName,' WHERE classid = ', argClassid );
        PREPARE stmt FROM @s;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END
//
delimiter ;

然后在你的陈述中用它来称呼它:

编辑 - 添加了加入:

select sysclass.id, sysclass.tableid, getTableCount(SysTable.Name, 'xxx') as count
    from sysclass, SysTable:
    where id in (
        select contentid 
            from sysclassgroupcontent 
            where groupid = 5 AND contenttype != 1
        )
    and SysTable.ID = sysclass.tableid;