现在是这么个情况
数据库命名规则是db1,db2,db3,db4,db5~~~~~~~~一直到下去,最大是db10
数据库如果存在,则里面一定会有一个table1表,且表结构是一样的现在我想查询出所有db中的table1的记录
这么查?能否先判断数据库是否存在,然后再查?SELECT * FROM db1.table1 IF EXISTS db1.table1
 
说有语法错误。

解决方案 »

  1.   

    这种问题为什么不在程序里通过循环去解决,非要在sql端解决呢,把简单的问题搞复杂了我认为
      

  2.   

    呵呵
    我本来是想仿照drop if exists
    谁知道用在select上不行
    如果可以的话,比在程序中要简单的多吧
      

  3.   

    在MYSQL中没有办法通过SQL语句实现这个需求。可以通过存储过程或者你自己的程序中实现。
    你可以通过查询 mysql> select SCHEMA_NAME from information_schema.SCHEMATA;
    +--------------------+
    | SCHEMA_NAME        |
    +--------------------+
    | information_schema |
    | csdn               |
    | mysql              |
    | test               |
    +--------------------+
    4 rows in set (0.09 sec)mysql>
      

  4.   

    如果表中记录不多的话,并且这个查询经常用到,则建议做个视图。create veiw xxx as 
    select 'db1' as dbName,* from db1.table1
    union all
    select 'db2' as dbName,* from db2.table1
    union all
    select 'db3' as dbName,* from db3.table1
    union all
    select 'db4' as dbName,* from db4.table1
    union all
    ...
    union all
    select 'dbN' as dbName,* from dbN.table1以后直接 select * from xxx where dbName='db1'
      

  5.   

    只能通过SP循环查询,如果能确定有多少DB,可以直接用SQL语句
      

  6.   

    我就是先建一个视图
    现在的关键点是我不知道dbn是否存在
    如果不存在,则这个视图就建不起来
    我就想能不能像drop table一样,先判断是否存在,如果存在则执行
    如:
    ***
    union all
    select 'db4' as dbName,* from db4.table1 if exists db4.table1 
    ***
    但是报错
      

  7.   

    用存储过程来处理吧。不断的循环,得到一个SQL,再执行。模仿上层代码。