如何查找具有两列或更多列的mySQL数据库中的所有表

时间:2015-04-03 06:36:46

标签: mysql

我想找到mySQL数据库中的所有表,其中有两列' zoneid'和' affiliateid'。

如果我使用下面的查询,它将为我提供具有任一列的表。我想找出有两列的表

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('affiliateid','zoneid')
        AND TABLE_SCHEMA='openx';

我尝试编写像

这样的查询
SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('affiliateid') AND COLUMN_NAME IN ('zoneid')
        AND TABLE_SCHEMA='openx';

但它不起作用

4 个答案:

答案 0 :(得分:1)

  SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME ='affiliateid' union SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'zoneid'

SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME ='affiliateid' union all SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'zoneid'

或类似于

SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%affiliateid%' union all SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%zoneid%'

答案 1 :(得分:0)

试试这个:

SELECT name FROM sysobjects WHERE id IN 
( SELECT id FROM syscolumns WHERE name = 'affiliateid' )
and id in 
( SELECT id FROM syscolumns WHERE name = 'zoneid')

OR

select t.name
from sys.tables t 
inner join sys.columns c on c.object_id=t.object_id 
where c.name in ('zoneid','affiliateid')
group by t.name
having count(distinct c.name) = 2

答案 2 :(得分:0)

你可以使用。

SELECT table_schema, table_name, count(*) AS `Tcount` FROM INFORMATION_SCHEMA.`COLUMNS`
WHERE `column_name` IN ('affiliateid','zoneid')
GROUP BY table_schema, table_name
HAVING `Tcount` = 2

Tcount 应该是您要查找的相同列数。如果是这样,则表格中包含所有必需的列

答案 3 :(得分:0)

这对我有用:

SELECT DISTINCT C1.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS C1
INNER JOIN INFORMATION_SCHEMA.COLUMNS C2
ON  C2.TABLE_NAME=C1.TABLE_NAME
AND C1.COLUMN_NAME='zoneid'
AND C2.COLUMN_NAME='affiliateid'
AND C1.TABLE_SCHEMA='openx' AND C2.TABLE_SCHEMA='openx'