SQL: как узнать, есть ли хотя бы одна запись, соответствующая условию

В одной из таблиц моей базы данных я хочу знать, есть ли хотя бы одна запись, соответствующая условию.

Я написал запрос Count(*) from table where (условие). И в моей программе я могу проверить, является ли результат ненулевым значением. Это работает нормально.

Как мы можем это оптимизировать? Я не хочу ждать, пока он найдет общее количество записей, соответствующих условию.


person Dhanesh    schedule 22.09.2013    source источник


Ответы (3)


SELECT TOP 1 1 AS found
FROM tablename
WHERE ...

Затем проверьте, возвращает ли запрос одну строку или нет.

В этом случае движок немедленно вернет вам результат, как только найдет первую строку (при условии, что вы не добавите ORDER BY)

person zerkms    schedule 22.09.2013
comment
Это решение было действительно полезным. У меня есть еще один вопрос. Выберите столбец из таблицы, где условие LIMIT 1 - это еще один подход, который я успешно попробовал. Можете ли вы прокомментировать, какой из них будет оптимальным? - person Dhanesh; 23.09.2013
comment
@Dhanesh: теперь я запутался, о какой СУБД вы говорите. Это sql-сервер? MySQL? - person zerkms; 23.09.2013
comment
@Dhanesh: тогда ответ - разницы нет. Если sqlite оптимизирует это (я не знаю, как на самом деле работает его оптимизатор), тогда используйте то, что вам больше нравится. - person zerkms; 23.09.2013
comment
TOP и LIMIT относятся к СУБД: stackoverflow.com/q/5668540/6068036 - person AlexM; 29.01.2021

В SQL есть exists, который можно использовать для этого. Это вернет 1, если запрос возвращает результат, и 0 в противном случае.

Select Case When Exists (<query>) Then 1 Else 0 End as X
person Laurence    schedule 22.09.2013

Команда SqlCommand = новая SqlCommand("SELECT * FROM InsertProductTb", con);

        SqlDataAdapter da = new SqlDataAdapter(command);
        DataTable dt = new DataTable();
        da.Fill(dt);

        if (dt.Rows.Count > 0)
        {

         }
person Omar Alterawi    schedule 22.09.2013
comment
Что произойдет, если он совпадет с миллионом строк? - person zerkms; 22.09.2013
comment
вы должны определить конкретное условие - person Omar Alterawi; 22.09.2013
comment
так насколько ваш ответ отличается от идей ОП в вопросе? - person zerkms; 22.09.2013
comment
извините, хотя он знает, как сделать свое условие, но он не знает, как проверить, есть ли запись в базе данных или нет - person Omar Alterawi; 22.09.2013
comment
Вы вообще полностью прочитали вопрос? Единственная фраза, оканчивающаяся знаком вопроса, — «Как мы можем это оптимизировать?». Как вы думаете, похоже, он не знает, как проверить, есть ли запись? - person zerkms; 22.09.2013
comment
вы можете ответить на вопрос без разговоров ??!! он выберет правильный ответ :) - person Omar Alterawi; 22.09.2013
comment
Я действительно могу. Я имел в виду - ваш ответ бесполезен. В любом случае, получайте удовольствие :-) - person zerkms; 22.09.2013
comment
Моя задача заключалась в том, чтобы получить оптимизированный запрос. Извините, что ввел Омара в заблуждение. Спасибо за вашу поддержку, zerkms :), и спасибо за усилия, Омар - person Dhanesh; 23.09.2013