(我的)SQL:FROM子句中的通配符?

时间:2011-09-09 13:44:31

标签: mysql sql

我有一个包含大约200个表的数据库,需要对包含某个列(creation_date)的所有表进行查询,但并非所有表都有该列。 SELECT * FROM * WHERE creation_date>=42显然不起作用,但这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, TABLE_NAME,
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name ='creation_date'] 

直接从MySQL复制 - 你需要循环通过这些系统表,列表将包含那些......

然后你可以构建你的SQL语句并确保它们有效......

答案 1 :(得分:0)

您可以从元数据构建动态SQL查询。我会这样做:

  1. 获取表格列表
  2. 对于每张表,
  3. 查看该表是否包含列creation_date
  4. 如果是,请将此表上的查询添加到动态查询
  5. 将结果联合起来
  6. 您也可以在多个表上创建视图。然后你可以查询视图。

答案 2 :(得分:-1)

您可以尝试包含要查询的表格,如下所示:

SELECT * FROM table1 a, table2 b WHERE a.creation_date>=42

您不能在from中使用通配符。以上面所示的方式,您可以指定where子句必须应用于哪些表。你可以省略那些没有专栏的那些。

因此在示例查询中,table1(别名a)包含列,而table2(别名b)则没有。