Есть две таблицы: table1 (record text), table2 (phone text).
Цель — выбрать все такие record, что бы в них не встречались подстроки phone.
Вот такая инструкция SELECT * FROM table1 WHERE record NOT LIKE (SELECT '%'||phone||'%' FROM table2) не срабатывает, а точнее принимает в рассмотрение только первую строку из table2.
--
Ну или подскажите, пожалуйста, где можно найти sqlite коммьюнити которое может ответить на вопрос?
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.
Умение программировать — это в первую очередь умение чётко мыслить. Умение программировать на SQL — это в первую очередь умение чётко сформулировать, что нужно получить. Потому что такая формулировка практически и есть верный sql-запрос.
B>Есть две таблицы: table1 (record text), table2 (phone text). B>Цель — выбрать все такие record, что бы в них не встречались подстроки phone.
Теперь возьмите эту фразу и аккуратно сформулируйте её, не глотая слов. И останется только записать её английскими терминами.
B>Вот такая инструкция SELECT * FROM table1 WHERE record NOT LIKE (SELECT '%'||phone||'%' FROM table2) не срабатывает, а точнее принимает в рассмотрение только первую строку из table2.
Здравствуйте, Bonavena, Вы писали:
B>Хай.
B>Есть две таблицы: table1 (record text), table2 (phone text). B>Цель — выбрать все такие record, что бы в них не встречались подстроки phone.
B>Вот такая инструкция SELECT * FROM table1 WHERE record NOT LIKE (SELECT '%'||phone||'%' FROM table2) не срабатывает, а точнее принимает в рассмотрение только первую строку из table2.
B>-- B>Ну или подскажите, пожалуйста, где можно найти sqlite коммьюнити которое может ответить на вопрос?
Может, так:
SELECT t1.* FROM table1 t1 WHERE NOT EXISTS (SELECT t2.* FROM table2 t2 WHERE t1.recort LIKE '%'||t2.phone||'%')
Здравствуйте, Softwarer, Вы писали:
S>Умение программировать — это в первую очередь умение чётко мыслить. Умение программировать на SQL — это в первую очередь умение чётко сформулировать, что нужно получить. Потому что такая формулировка практически и есть верный sql-запрос.
Спасибо за откровение. Пойду запишу, что бы не забыть.
B>>Есть две таблицы: table1 (record text), table2 (phone text). B>>Цель — выбрать все такие record, что бы в них не встречались подстроки phone. S>Теперь возьмите эту фразу и аккуратно сформулируйте её, не глотая слов. И останется только записать её английскими терминами.
Цель запроса: выбрать все колонки record из таблицы table1 такие, что в значении этой колонки не попадается (даже в виде подстроки) ни одно из значений колонки phone из таблицы table2. Чем это отличается от написанного далее запроса?
B>>Вот такая инструкция SELECT * FROM table1 WHERE record NOT LIKE (SELECT '%'||phone||'%' FROM table2) не срабатывает, а точнее принимает в рассмотрение только первую строку из table2.
S>Ужас. Этот sqlite, похоже, ещё круче FoxPro.
Если вы не знаете сабжа, зачем лезете умничать в топик? Языком потрепать?
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.
Здравствуйте, zhech, Вы писали:
B>>Вот такая инструкция SELECT * FROM table1 WHERE record NOT LIKE (SELECT '%'||phone||'%' FROM table2) не срабатывает, а точнее принимает в рассмотрение только первую строку из table2.
Z>
Z>SELECT t1.* FROM table1 t1 WHERE NOT EXISTS (SELECT t2.* FROM table2 t2 WHERE t1.recort LIKE '%'||t2.phone||'%')
Z>
Большое спасибо, заработало. Вот уж не подумал бы никогда о таком использовании EXISTS...
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.
Здравствуйте, Bonavena, Вы писали:
B>Есть две таблицы: table1 (record text), table2 (phone text). B>Цель — выбрать все такие record, что бы в них не встречались подстроки phone.
B>Вот такая инструкция SELECT * FROM table1 WHERE record NOT LIKE (SELECT '%'||phone||'%' FROM table2) не срабатывает, а точнее принимает в рассмотрение только первую строку из table2.
Ну а почему бы этот запрос мог бы работать? Подзапрос возвращает множество строк, LIKE требует вторым операндом одну строку. Хорошая СУБД должна этот запрос вообще отвергнуть как некорректный сразу, как определит, что подзапрос вернул не ровно одну запись.
Видеть в задаче «выбрать все такие record, чтобы в них не встречались подстроки phone» формальную формулировку «{record∈table1 | ¬∃phone∈table2 (record LIKE '%' || phone || '%')}» учит математическая логика.
Большая просьба, для экономии своего и чужого времени — отвечайте, пожалуйста, по существу.
Точнее — не отвечайте, так как правильный ответ уже подсказан выше в теме.
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.
Здравствуйте, Bonavena, Вы писали:
B>Цель запроса: выбрать все колонки record из таблицы table1 такие, что в значении этой колонки не попадается (даже в виде подстроки) ни одно из значений колонки phone из таблицы table2. Чем это отличается от написанного далее запроса?
Cловами "ни одно из". Которые выливаются в разницу между Вашим запросом и вышеприведённым, который работает.
B>Если вы не знаете сабжа, зачем лезете умничать в топик? Языком потрепать?
Всяко не для того, чтобы расстилаться перед первой попавшейся хамкой.
B>Большая просьба, для экономии своего и чужого времени — отвечайте, пожалуйста, по существу. B>Точнее — не отвечайте, так как правильный ответ уже подсказан выше в теме.
Для экономии своего и чужого времени гораздо выгоднее один раз попытаться научить думать, нежели раз за разом отвечать на .. простые вопросы.
B>Большая просьба, для экономии своего и чужого времени — отвечайте, пожалуйста, по существу.
Вообще-то, совет научиться правильно перекладывать требования в СКЛ как раз и был самым лучшим с точки зрения экономии своего и, особенно, чужого времени.
Здравствуйте, avpavlov, Вы писали:
B>>Большая просьба, для экономии своего и чужого времени — отвечайте, пожалуйста, по существу. A>Вообще-то, совет научиться правильно перекладывать требования в СКЛ как раз и был самым лучшим с точки зрения экономии своего и, особенно, чужого времени.
Извините, конечно. Но в вашем сообщении не было совершенно совершенно ничего конструктивного.
Была только отсылка к "хорошим субд", когда конкретно указана используемая, а также бравирование "математической логикой" и фигурными скобочками.
Как автор темы я вроде бы обязан отвечать на Ваши ответы, но смысла в продолжении диалога в данном ключе не вижу. Правильный ответ на вопрос уже дан выше другим участником.
Real Programmers don't comment their code. If it was hard to write, it should be hard to understand.