Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2018, 13:37   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию Sql множественный where

Реально ли сделать запрос с множественным where ?

Есть таблица 1 с множеством строк, в ней например 1000000 строк.
Есть таблица 2, где примерно 200 строк, тот самый список.

Возможно ли проверить каждую строку из таблицы 1 на совпадение из таблицы 2(то есть строчку проверить на удовлетворению условию where 200 раз в этом мысль). То есть не находится ли случайно совпадение из таблицы 2 в таблице один. И такие строчки где совпадение находится вывести.



Аналог обычного запроса с 1 было бы так
Код:
SELECT * FROM user_agent WHERE user_agent LIKE '%Python-urllib%'
Или же
Код:
SELECT * FROM user_agent WHERE user_agent = 'Python-urllib'
А как сделать так примерно схематично что
Код:
SELECT * FROM user_agent WHERE user_agent =и тут проверить на совпадение из списка из 200 записей
Тоесть проверил бы что
Код:
SELECT * FROM user_agent WHERE user_agent = 'Python-urllib'
SELECT * FROM user_agent WHERE user_agent = 'BackDoorBot/1.0'
SELECT * FROM user_agent WHERE user_agent = 'BlowFish/1.0'
SELECT * FROM user_agent WHERE user_agent = 'RMA'
.....
и так далее, тока разом, и чтобы быстро работало

Последний раз редактировалось a.n.o.n.i.m; 31.01.2018 в 13:40.
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.01.2018, 13:50   #2
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Вот так сделал
Код:
SELECT logs_data.* FROM logs_data WHERE (((logs_data.user_agent) In (SELECT DISTINCT user_agents.name FROM user_agents)))
Может более производительнее, быстрее можно сделать?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.01.2018, 14:11   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Даже вопрос так, как заставить дружить in и like
Тоесть например нужно сделать не точное совпадение а частичное,ммм?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.01.2018, 14:30   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

in и like не подружишь. С like любой будет медлен. А простым сравнением если есть индексы, то можно ускорить
Код:
SELECT logs_data.* 
  FROM logs_data 
  WHERE EXISTS(SELECT 0 FROM user_agents WHERE user_agents.name=logs_data.user_agent)

SELECT logs_data.* 
  FROM logs_data 
  WHERE EXISTS(SELECT 0 FROM user_agents WHERE logs_data.user_agent LIKE '%'+user_agents.name+'%' )

SELECT logs_data.* 
  FROM logs_data 
    LEFT JOIN user_agents ON user_agents.name=logs_data.user_agent
  WHERE user_agents.name IS NOT NULL
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.01.2018, 14:50   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Три разных запроса предложили

Код:
SELECT logs_data.* 
  FROM logs_data 
  WHERE EXISTS(SELECT 0 FROM user_agents WHERE logs_data.user_agent LIKE '%'+user_agents.name+'%' )
" У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса около '+user_agents.name+'%' )"

Как исправить?
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.01.2018, 14:57   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А че, не знаешь как строки складываются в мускуле?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 31.01.2018, 15:18   #7
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

теперь знаю)
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.01.2018, 15:56   #8
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Результат тока странный
a.n.o.n.i.m вне форума Ответить с цитированием
Старый 31.01.2018, 16:00   #9
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 301
По умолчанию

Код:
SELECT logs_data.* FROM logs_data WHERE EXISTS(SELECT 0 FROM user_agents WHERE logs_data.user_agent LIKE concat('%',user_agents.name,'%') )
и


Код:
SELECT logs_data.* FROM logs_data WHERE (((logs_data.user_agent) In (SELECT DISTINCT user_agents.name FROM user_agents)))
колосально разный результат.
a.n.o.n.i.m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
множественный выбор в ehlib kate158 Компоненты Delphi 0 28.05.2012 11:22
Множественный тип. Kovax Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2011 17:00
множественный выбор dimast_bl_y Microsoft Office Access 1 09.07.2010 16:28
множественный выбор в cxGrid ~=DEN=~ Общие вопросы Delphi 1 20.05.2010 10:17
Множественный тип Ruska882009 PHP 5 30.09.2009 13:08