Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > [SQLite] Сложный запрос с ANY, SOME и ALL


Автор: saneea 7.4.2011, 22:15
Создаю такую табличку:

Код

CREATE TABLE PHOTOSTAGS(PhotoID INTEGER, PRIMARY KEY (PhotoID));


пытаюсь выполнить простейший сложный запрос (над смыслом запроса задумываться не надо, т.к. это просто для примера)
Код

SELECT PhotoID FROM PHOTOSTAGS WHERE PhotoID  > ALL (SELECT PhotoID FROM PHOTOSTAGS);

Выдаёт: "Error: near "ALL": syntax error"

меняю ALL на ANY
Код

SELECT PhotoID FROM PHOTOSTAGS WHERE PhotoID  > ANY (SELECT PhotoID FROM PHOTOSTAGS);

Выдаёт: "Error: near "SELECT": syntax error"

Очень странно, что на ALL и ANY SQLite по разному "ошибаеся"... или у него ALL это какое-то другое ключевое слово?
А при этом MySQL без проблем кушает эти же запросы... В чём может быть проблема?

Автор: Zloxa 8.4.2011, 08:45
Что по поводу ALL и ANY сказано в документации вашей версии SQLLite?

Автор: saneea 8.4.2011, 10:09
Да вобще-то ничего я не нашёл по ANY и ALL... но ведь эти ключевые слова - это вроде часть SQL, т.е. любая СБД должна их поддерживать (ну это в моём понимании).

Автор: Zloxa 8.4.2011, 10:12
Цитата(saneea @  8.4.2011,  10:09 Найти цитируемый пост)
любая СБД должна их поддерживать

Кому должна? smile 
Можешь подать на них в суд, если это так. smile 

Автор: saneea 8.4.2011, 12:49
Zloxa, то есть вы не знаете ответ на мой вопрос. Понятно. Спасибо.

Может у кого-нибудь есть мысли по делу?

Автор: Zloxa 8.4.2011, 13:12
т.е. мысли кого-нибдуь для Вас более ценный источник нежели документация производитля и эмпирический опыт?  smile 

Автор: LSD 8.4.2011, 14:15
saneea, 
Zloxa абсолютно прав. Давно бы уже пора заглянуть в http://www.sqlite.org/syntaxdiagrams.html и убедится, что SQLite не знает таких операторов как ALL и ANY.

Автор: saneea 8.4.2011, 15:03
Ну ок, нет в SQLite кванторов ANY, SOME и ALL. Ну и как тогда выполнить запрос типа "выбрать записи, у которых такое_то поле больше, чем все (или хотя бы один) из (выбрать записи из таблицы ТАБЛИЦА)"?

Автор: LSD 8.4.2011, 15:12
А для этого у нас есть специальный раздел Составление SQL-запросов smile 


А вообще простые агрегатные функции min/max должны помочь.

Автор: Zloxa 8.4.2011, 15:14
Цитата(saneea @  8.4.2011,  15:03 Найти цитируемый пост)
как 

О! Ну так это же совсем уже другой вопрос

Ответа на него не знаю, с ограничениями SQLite не знаком, но пробовал бы в первую очередь так:
Цитата(saneea @  8.4.2011,  15:03 Найти цитируемый пост)
такое_то поле больше, чем все

Код

SELECT PhotoID FROM PHOTOSTAGS WHERE PhotoID  >  (SELECT max(PhotoID) FROM PHOTOSTAGS)

Цитата(saneea @  8.4.2011,  15:03 Найти цитируемый пост)
или хотя бы один)

Код

SELECT PhotoID FROM PHOTOSTAGS WHERE PhotoID  >  (SELECT min(PhotoID) FROM PHOTOSTAGS)



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)