如何查找所有包含columnS和column的表

How to find all tables that contain columnA and columnB

我想实现这样的目标:

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'columnA'
AND COLUMN_NAME LIKE 'columnB';

但是这个特定的查询会return0个巧合。

你应该使用 OR 而不是 and..

SELECT DISTINCT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE 'columnA'
OR COLUMN_NAME LIKE 'columnB';

不可能在同一行中有一列包含 'columnA' AND 'columnB'

但是如果您需要 table 名称,您可以使用内部联接

SELECT DISTINCT C1.TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS C1
INNER JOIN (
  SELECT DISTINCT TABLE_NAME 
   FROM INFORMATION_SCHEMA.COLUMNS 
   WHERE COLUMN_NAME LIKE 'columnB'
) C2 ON C1.TABLE_NAME = C2.TABLE_NAME
WHERE C2.COLUMN_NAME LIKE 'columnA'

information_schema.columns 中的每一行代表一列 - 它不能既是 columnA 又是 columnB。一种方法可能是计算 table 中此类列的数量并检查 return 两个结果:

SELECT   table_name
FROM     information_schema.columns
WHERE    column_name IN ('COLUMNA', 'COLUMNB')
GROUP BY table_name
HAVING   COUNT(*) = 2