Делать запрос, только если нет результатов по предыдущему запросу - PullRequest
1 голос
/ 26 декабря 2010

Я делаю этот запрос (1):

(1)SELECT * FROM t1 WHERE title LIKE 'key%' LIMIT 1

Мне нужно сделать второй (2) запрос, только если этот предыдущий запрос не дал результатов

(2)SELECT * FROM t1 WHERE title LIKE '%key%' LIMIT 1

В основном мне нужна только 1 строка, которая получила наиболее близкий заголовок моего ключа.

Atm. Я использую запрос UNION с настраиваемым полем, чтобы упорядочить его, и LIMIT 1. Проблема в том, что я не хочу выполнять запрос других, если уже первый результат дал результат.

Спасибо

1 Ответ

2 голосов
/ 26 декабря 2010

Не существует стандартного способа сказать «выполнить запрос Q2, если и только если запрос Q1 ничего не возвращает» в одной инструкции SQL.

Умеренно близкий подход:

SELECT * FROM t1 WHERE title LIKE 'key%' LIMIT 1
UNION
SELECT * FROM t1 WHERE title LIKE '%key%'
   AND NOT EXISTS (SELECT * FROM t1 WHERE title LIKE 'key%')
 LIMIT 1

Вопрос в том, будет ли оптимизатор достаточно умен, чтобы понять, что подзапрос NOT EXISTS является первой половиной UNION.

...