mysql 选择特定的表_MySQL选择具有多个特定列的所有表
我想獲取具有3個特定列的所有表名.
我想要的是從信息模式中獲取所有包含columnA AND columnB AND columnC的表名.
目前,我正在使用類似的查詢
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME='columnA'
AND TABLE_SCHEMA='mysampledatabase';
如何擴展上述查詢并選擇包含列名稱columnA和columnB的表?
我遇到了this answer和其他類似的答案.他們回答了以下問題:
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’或COLUMN_NAME =’columnB’或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';
但是,您需要為每個要查找的列添加或刪除多余的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
TablesCount應該等于您要查找的列數.如果是這樣,則您的表具有所有必需的列
標簽:information-schema,mysql
來源: https://codeday.me/bug/20191029/1960747.html
總結
以上是生活随笔為你收集整理的mysql 选择特定的表_MySQL选择具有多个特定列的所有表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的制造商,国内某通信设备制造商J
- 下一篇: 签到 数据库php,php与数据库的连接