|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
Привет заглянувшим! Столкнулся со следующей ситуацией: Выбираю данные из одной таблицы с условием что пара полей записи должна совпадать с подобной парой из другой таблицы. И само собой это не моё изобретение, подсмотрел: запрос.1 Код: sql 1. 2. 3. 4.
SQLite сообщает о синтаксической ошибке при обращении из PHP, при выполнении в Менеджере/администраторе. А вот такая конструкция отрабатывает ожидаемо: запрос.2 Код: sql 1. 2. 3. 4.
Пробовал MySQL - выдает ожидаемый результат по обоим запросам без претензий. Интересно ... это особенности реализации версий или действительно мой косяк ? Предвосхищая указания по направлению поиска - да, в учебнике подобного не нашел, потому и спрашиваю. Необходимое решение получено другим запросом, но мне кажется это более наглядным и писанины меньше. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2015, 23:48 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
Генн, заменить [NOT] IN на [NOT] EXISTS ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 04:45 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
Генн, а после - вспомнить, что [NOT] IN | [NOT] EXISTS подзапросы оптимизируются через [LEFT] JOIN и заюзать это тсамый джойн в своем запросе... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 04:47 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
ГеннА вот такая конструкция отрабатывает ожидаемо: запрос.2 Код: sql 1. 2. 3. 4.
Если хочешь делать такой подзапрос по нескольким полям, то просто склей их: Код: sql 1. 2.
Но это очень не рекомендуется делать на больших таблицах. ГеннПробовал MySQL - выдает ожидаемый результат по обоим запросам без претензий.Если в самосвал можно загрузить сорок тонн угля, это вовсе не означает что эти же сорок тонн угля можно загрузить в легковушку. Несмотря на то, что и самосвал и легковушка это автомобили. Добрый Э - ЭхГенн, заменить [NOT] IN на [NOT] EXISTSС чего-бы это вдруг? Смысл у этих условий разный. Добрый Э - Эха после - вспомнить, что [NOT] IN | [NOT] EXISTS подзапросы оптимизируются через [LEFT] JOIN и заюзать это тсамый джойн в своем запросе... А это да. Простой join здесь будет намного более удобным и быстрым. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 06:22 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
White OwlС чего-бы это вдруг? Смысл у этих условий разный.с того бы это двруг. если сам не можешь понять - спроси, знающие люди объяснят... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 06:56 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
единственное, что EXISTS-подзапрос в этом случае нужно будет скоррелировать на основной запрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 07:03 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
White Owl[/src] Если хочешь делать такой подзапрос по нескольким полям, то просто склей их: Код: sql 1. 2.
Но это очень не рекомендуется делать на больших таблицах. [/quot] Так склеивать вообще никогда нельзя не только из-за того что отвалятся индексы. нужен дополнительный "магический символ",который гарантированно отсутствует в исходных полях fldfrst || '~' ||fldto без этого костыля ты получишь ошибочную выборку в определенных комбинациях значений двух полей. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 11:21 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
Ребята ! Всем спасибо за отзывчивость. Но если обратите внимание на последние пару строк.... то заметите упоминание авторНеобходимое решение получено другим запросом Вы меня абсолютно убедили что такой способ через WHERE-IN не эффективен, к тому же все руководства упоминают что использование IN нежелательно. О его, IN, нехорошей производительности полно постов по форумам. Про самосвал с легковухой - ваще ярко, спасибо White Owl . Добрый Э - Эх , извинии, я так и не понял зачем ты упоминал [NOT] в своем посту Добрый Э - Эх[NOT] IN на [NOT] EXISTS... К стати это было мотивом еще раз покопаться в учебнике, спасибо. Интерес состоял в другом: - такая конструкция не работает только в моей ситуации или она в принципе не должна работать в реализациях SQLite ? !!! P.S. модуль SQLite версии 2.8.17 дернут из какой то реализации Денвера вмесе с пыхом и всё это запущено под Nginx на локалке с ОСью виндАЗ-7 спецом для образовательных целей, вместо консоли юзаю SQLite-Administrator ( http://sqliteadmin.orbmu2k.de/) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 11:56 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
Генн, sqlite не умеет в in несколько полей https://www.sqlite.org/lang_expr.html читай с The IN and NOT IN operators ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 13:16 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
PPA , я смотрел оригинальную доку, но не силен в аглицком... потому и не понял, потому и полез спрашивать. Вопрос закрыт. Всем огромное спасибо за внимание ! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 14:55 |
|
конструкция WHERE IN с несколькими полями сравнения
|
|||
---|---|---|---|
#18+
ГеннИнтерес состоял в другом: - такая конструкция не работает только в моей ситуации или она в принципе не должна работать в реализациях SQLite ?Вопрос поставлен не верно. Но попытаюсь ответить: В настоящее время, такая конструкция не предусмотрена стандартом языка SQL. Никто не запрещает создателям СУБД добавлять к стандартному языку все что они пожелают, когда они реализуют свою собственную СУБД. Как результат, мы имеем кучу разных СУБД с разными возможностями и разными диалектами SQL. Все эти диалекты совпадают между собой в пределах стандарта языка, но различаются в дополнениях. Хочешь быть экспертом в конкретной СУБД - зубри ее диалект. Хочешь быть экспертом в СУБД вообще - зубри стандарт и учись использовать диалекты когда это оправдано. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2015, 17:33 |
|
|
start [/forum/topic.php?fid=54&fpage=10&tid=2008691]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 398ms |
0 / 0 |