Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 31.01.2018, 14:37   #1
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 270
Репутация: 10
По умолчанию 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 в 14:40.
a.n.o.n.i.m вне форума   Ответить с цитированием
Старый 31.01.2018, 14:50   #2
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 270
Репутация: 10
По умолчанию

Вот так сделал
Код:

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, 15:11   #3
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 270
Репутация: 10
По умолчанию

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

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, 15:50   #5
a.n.o.n.i.m
Форумчанин
 
Регистрация: 26.02.2011
Сообщений: 270
Репутация: 10
По умолчанию

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

Код:

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, 15:57   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,595
Репутация: 6210
По умолчанию

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

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

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

Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
множественный выбор в ehlib kate158 Компоненты Delphi 0 28.05.2012 11:22
Множественный тип. Kovax Паскаль 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


21:16.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru