2013-05-22 2 views
0

Мне нужно определить, существует ли база данных и/или таблица по одному запросу, чтобы действовать соответствующим образом. У меня есть этот Fugly работа запроса:Обнаружить, существуют ли базы данных и таблицы по одному и тому же запросу

SELECT * FROM 

(SELECT COUNT(*) AS `database` 
FROM INFORMATION_SCHEMA.SCHEMATA 
WHERE SCHEMATA.SCHEMA_NAME="database_name") AS foo, 

(SELECT COUNT(*) AS `table` 
FROM INFORMATION_SCHEMA.TABLES 
WHERE table_schema = "database_name" 
AND table_name = "table_name") AS bar 

Этот запрос возвращает:

database table 
1   0 

Но ... Может быть, есть лучший способ там.

+0

Использование 'UNION ALL'? – Kermit

+0

Таблица AFAIK и база данных являются зарезервированными ключевыми словами и не должны использоваться. –

+0

Я не уверен. Таблицы имеют разную структуру. – Veehmot

ответ

1

Используйте LEFT JOIN:

SELECT schemata.schema_name AS `database_name`, tables.table_name 
FROM INFORMATION_SCHEMA.SCHEMATA schemata 
LEFT JOIN INFORMATION_SCHEMA.TABLES tables 
    ON schemata.schema_name = tables.table_schema 
    AND tables.table_name = "table_name" 
WHERE SCHEMATA.SCHEMA_NAME="database_name" 
0

Это также будет работать, хотя я не уверен, что это какой-нибудь симпатичнее :)

SELECT 
    MAX(CASE 
     WHEN table_schema = 'database_name' THEN 1 
     ELSE 0 
     END) AS `database` 
, MAX(CASE 
     WHEN table_schema = 'database_name' AND table_name = 'table' THEN 1 
     ELSE 0 
     END) AS `table` 
FROM information_schema.tables;