MySql 选择具有多个特定列的所有表

2023-11-27

我想获取所有具有 3 个特定列的表名。

我想要的是从我想要得到的信息模式所有表名其中包含columnA AND columnB AND columnC.

目前我正在使用类似的查询

SELECT DISTINCT TABLE_NAME 
  FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME='columnA'
        AND TABLE_SCHEMA='mysampledatabase';

我怎么能够扩展上面的查询并选择包含列名的表columnA and 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_NAME 
      FROM INFORMATION_SCHEMA.COLUMNS
      WHERE COLUMN_NAME IN ('columnA','columnB','columnC')
group by TABLE_NAME
having count(distinct COLUMN_NAME) = 3 

在上面的查询中,有计数的将没有。中指定的列数IN phrase.

或尝试以下操作(但这会给很多列带来灾难。所以避免它)

SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME IN 
( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'columnA' )
and TABLE_NAME in 
( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'columnB')
and TABLE_NAME in 
( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = 'columnC')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySql 选择具有多个特定列的所有表 的相关文章

随机推荐