Jalen_W
2019-04-11 23:22
采纳率: 100%
浏览 1.7k

如何用一条sql语句查询多个相同结构的表内 筛选出的结果的条目数?

目的是要分别列出9个表内满足条件sortingPort = 1的条目数

SELECT count(*) FROM cg_01 WHERE sortingPort = 1 union all
SELECT count(*) FROM cg_02 WHERE sortingPort = 1 union all
.
.
.
SELECT count(*) FROM cg_09 WHERE sortingPort = 1

如果使用union all要将9条语句合并,当我要查询条件为sortingPort = 2的结果,就要修改9次。有没有办法修改FROM后面的内容只用一条语句来查询,或者有其他办法?

SELECT count(*) 
FROM ?????? 
WHERE sortingPort = 1 
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • 庄粟 2019-04-12 11:40
    已采纳

    也可以这样:
    如果是代码里的sql就用for循环生成指定sql
    如果是连接工具可以设置会话变量,如 set var = 2 ,sql 里直接用变量代替常量

    打赏 评论
  • RecursionHs 2019-04-12 09:53

    oracle可以使用视图解决。mysql应该也有视图,创建一个视图即可解决你的问题,具体百度 mysql创建视图。

    打赏 评论
  • 苏海伦的喜悦ds 2019-04-12 10:55

    楼上的办法我知道,确实可行,创建的视图内容可以是这几张表的集合,

    CREATE OR REPLACE VIEW  cg as 'SELECT * FROM cg_01 union all
    SELECT * FROM cg_01 union all
    SELECT * FROM cg_01 '
    

    就这种,然后你的库里就会出现一个像表一样叫cg的东西,里面的内容就是上面的查询语句,接下来你就直接按正常的查询条件,把表明替换成视图名就ok了,

    打赏 评论
  • qinzuibaozi 2019-04-12 22:13

    SELECT count(*)
    FROM (select sortingPort from cg_01 union select sortingPort from cg_02 union ……)
    WHERE sortingPort = 1

    打赏 评论

相关推荐 更多相似问题