2016-06-17 18 views
2

Ich habe die folgende Abfrage versucht, die Tabellen aufzulisten, die die aufgeführten 4 Spalten enthalten. Aber es gibt keine Tabellen zurück.listet die Tabellen nur auf, wenn alle aufgelisteten Spalten existieren - MySQL

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE COLUMN_NAME = 'moduleid' 
     AND COLUMN_NAME = 'userroleid' 
     AND COLUMN_NAME = 'sortorder' 
     AND COLUMN_NAME = 'setdefault' 
     AND TABLE_SCHEMA='db_name' 

Wenn ich nur eine Spalte in where Bedingung verwendet, gibt es die Tabellen zurück. Ich muss die Tabellen kennen, die alle 4 Spalten haben.

Antwort

3

Dies ist vielleicht nicht die eleganteste Lösung, aber es sollte funktionieren.

SELECT DISTINCT c1.TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS c1 
JOIN INFORMATION_SCHEMA.COLUMNS c2 on c1.TABLE_NAME = c2.TABLE_NAME 
JOIN INFORMATION_SCHEMA.COLUMNS c3 on c1.TABLE_NAME = c3.TABLE_NAME 
JOIN INFORMATION_SCHEMA.COLUMNS c4 on c1.TABLE_NAME = c4.TABLE_NAME 
WHERE c1.COLUMN_NAME = 'moduleid' 
    AND c2.COLUMN_NAME = 'userroleid' 
    AND c3.COLUMN_NAME = 'sortorder' 
    AND c4.COLUMN_NAME = 'setdefault' 
    AND c1.TABLE_SCHEMA='db_name' 
3

Wenn Sie nicht 1 pro zusätzliche Spalte JOIN ausführen möchten

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE COLUMN_NAME IN ('moduleid', 
         'userroleid', 
         'sortorder', 
         'setdefault') 
    AND TABLE_SCHEMA='db_name' 
GROUP BY TABLE_NAME 
HAVING COUNT(*) = 4