Nis*_*Nis 5 mysql information-schema
我想获取所有具有 3 个特定列的表名。
我想要的是从信息模式中获取包含AND AND的所有表名。columnA columnB columnC
目前我正在使用类似的查询
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='columnA'
AND TABLE_SCHEMA='mysampledatabase';
Run Code Online (Sandbox Code Playgroud)
如何扩展上述查询并选择包含列名columnA和 的 表columnB?
我遇到了这个答案和其他类似的答案。他们的回答如下:
SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME IN ('columnA','ColumnB') AND TABLE_SCHEMA='YourDatabase';
然而,他们选择任何具有 3 列之一的表。我相信这是因为WHERE COLUMN_NAME IN ('columnA','ColumnB','ColumnC')我相信相当于COLUMN_NAME = 'columnA' OR COLUMN_NAME = 'columnB' OR COLUMN_NAME = 'columnC'
我尝试替换 WHERE 子句,WHERE COLUMN_NAME='columnA' AND COLUMN_NAME='columnB' AND COLUMN_NAME='columnC'它显然不会返回任何结果,因为COLUMN_NAME一次只能是 1 个值!
这是可能对您有帮助的查询:
SELECT`TABLE_SCHEMA`, `table_name`,c1.`column_name`,c2.`column_name`,c3.`column_name` FROM `COLUMNS` C1
INNER JOIN `COLUMNS` C2 USING(`TABLE_SCHEMA`, `TABLE_NAME`)
INNER JOIN `COLUMNS` C3 USING(`TABLE_SCHEMA`, `TABLE_NAME`)
WHERE c1.`column_name` = 'col1'
AND c2.`column_name` = 'col2'
AND c3.`column_name` = 'col3';
Run Code Online (Sandbox Code Playgroud)
但是您需要JOIN为您要查找的每一列添加|删除额外的内容。
现在我认为它有点沉重且难以理解,这是另一种选择:
SELECT table_schema, table_name, count(*) AS `TablesCount` FROM `COLUMNS`
WHERE `column_name` IN ('col1','col1','col1')
GROUP BY table_schema, table_name
HAVING `TablesCount` = 3
Run Code Online (Sandbox Code Playgroud)
TablesCount 应与您要查找的列数相同。如果是这样,那么您的表具有所有必需的列
| 归档时间: |
|
| 查看次数: |
3712 次 |
| 最近记录: |