SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 14.02.2009 15:59:23

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Проверка наличия записи в таблице

Нужно проверить наличие в таблице хотябы одной записи удовлетворяющей критериям поиска.
Использую

Код:

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)

Неактивен

 

#2 14.02.2009 23:18:01

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Проверка наличия записи в таблице

EXIST правильный выбор

1. зависит от того, зависимый ли подзапрос. Если условие включает поля из внешней таблицы, то будет выполняться для каждого ряда.
2. За неимением доказательств обратного, считаем, что оптимизатор выбрал правильный путь исполнения. Подзапрос все же выполнится полностью, но потом проверка пойдет до первого равенства.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson