Задавайте вопросы, мы ответим
Вы не зашли.
Нужно проверить наличие в таблице хотябы одной записи удовлетворяющей критериям поиска.
Использую
SELECT COUNT(*) FROM tbl WHERE (условие)
, но такой запрос будет искать/считать все записи.
Есть вариант после запроса
SELECT 1 FROM tbl WHERE (условие) LIMIT 1
проверять результат mysql_num_rows, но как то некрасиво выглядит, да и иногда нужно вставить подобную конструкцию в виде вложенного подзапроса.
-add: Можно попробовать использовать оператор EXISTS, но опять же неизвестно, будет ли подзапрос выполнен полностью или достаточно нахождения первой записи.
Ещё вопросы по запросу:
SELECT * FROM tbl WHERE `n1`!=ALL(SELECT `n2` FROM tbl WHERE (условие))
1. Подзапрос будет выполняться для каждого ряда внешнего запроса или только 1 раз?
2. Проверка условия `n`!=ALL остановится после нахождения перого же равества значений или будет просмотрена вся выборка подзапроса?
Отредактированно coin (14.02.2009 20:15:39)
Неактивен
EXIST правильный выбор
1. зависит от того, зависимый ли подзапрос. Если условие включает поля из внешней таблицы, то будет выполняться для каждого ряда.
2. За неимением доказательств обратного, считаем, что оптимизатор выбрал правильный путь исполнения. Подзапрос все же выполнится полностью, но потом проверка пойдет до первого равенства.
Неактивен