我有一个包含大约200个表的数据库,需要对包含某个列(creation_date)的所有表进行查询,但并非所有表都有该列。 SELECT * FROM * WHERE creation_date>=42
显然不起作用,但这样做的最佳方式是什么?
答案 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查询。我会这样做:
creation_date
您也可以在多个表上创建视图。然后你可以查询视图。
答案 2 :(得分:-1)
您可以尝试包含要查询的表格,如下所示:
SELECT * FROM table1 a, table2 b WHERE a.creation_date>=42
您不能在from中使用通配符。以上面所示的方式,您可以指定where子句必须应用于哪些表。你可以省略那些没有专栏的那些。
因此在示例查询中,table1(别名a)包含列,而table2(别名b)则没有。