我想找到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';
但它不起作用
答案 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'