SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 03.02.2012 02:02:19

Бананище
Участник
Зарегистрирован: 11.01.2012
Сообщений: 14

Особенности IN ()

Здравствуйте!
Вот есть такой запрос:

SELECT name
FROM table
WHERE id IN (3, 3, 3, 3)


При этом выведется одна строка, что печально. Как вывести 4 строки, даже если они идентичны?

Неактивен

 

#2 03.02.2012 02:06:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Особенности IN ()

Неактивен

 

#3 03.02.2012 02:16:01

Бананище
Участник
Зарегистрирован: 11.01.2012
Сообщений: 14

Re: Особенности IN ()

UNION ALL - это читерство smile
А если серъёзно - то это ИМХО всё равно что долбить базу циклом, запросами вида -

...WHERE id = 3


А значит ресурсоёмко sad

Есть иные варианты?

Неактивен

 

#4 03.02.2012 02:19:15

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Особенности IN ()

А зачем Вам такое странное условие в in?
SELECT `name` FROM table WHERE id = 3;
так не лучше?
Если Вам нужно получить количество таких записей, то проще так: SELECT count(*) FROM table WHERE id = 3;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 03.02.2012 02:19:35

Бананище
Участник
Зарегистрирован: 11.01.2012
Сообщений: 14

Re: Особенности IN ()

Даже проверил скорость на полутысяче юнионов:
(565 rows returned, query time 3.2373 seconds)

МНе не количество надо. Мне надо совместить две выборки из разных баз данных, причём могут попадаться дубликаты, типа вышеперечисленных

Отредактированно Бананище (03.02.2012 02:20:47)

Неактивен

 

#6 03.02.2012 02:23:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Особенности IN ()

Бананище написал:

UNION ALL - это читерство smile
А если серъёзно - то это ИМХО всё равно что долбить базу циклом, запросами вида -

...WHERE id = 3


А значит ресурсоёмко sad

Есть иные варианты?

Если у вас 4 идентичные строки в таблице, то запрос

SELECT name FROM table WHERE id =3
и вернет вам 4 строки. А если строк нет, но вы хотите их от базы получить, то это и есть читерство smile

Неактивен

 

#7 03.02.2012 02:29:49

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Особенности IN ()

Бананище написал:

Мне надо совместить две выборки из разных баз данных, причём могут попадаться дубликаты, типа вышеперечисленных

Что-то я не улавливаю суть. На примере, покажите, что есть и что вы хотите получить.

Неактивен

 

#8 03.02.2012 02:30:29

Бананище
Участник
Зарегистрирован: 11.01.2012
Сообщений: 14

Re: Особенности IN ()

В том-то и дело, что идентичных строк - нет. Опишу вопрос более предметно:

Есть скажем, база логов. В базе логов, одно из полей - это идентификаторы пользователей. Ясное дело, что в выборке логов - могут попадаться логи с одинаковыми значениями данных полей.

Так вот, мне надо вытащить 100500 логов из базы (как я уже сказал - в них будут попадаться и одинаковые идентификаторы) и составить такой запрос к другой базе (в другой базе - хранятся имена), который вернёт мне идентичное количество имён оттуда, причём верно сопоставленных. Обе базы - находятся на разных серверах.

Учитывая объём данных, с которым придётся весьма активно работать программе, - использование юнионов и подзапросов - фатально.

Неактивен

 

#9 03.02.2012 02:49:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: Особенности IN ()

Как вариант, во второй базе создаете временную таблицу в памяти. Передаете в неё 100500 идентификаторов values(),(),().. Делаете join с таблицей имен, получаете нужный вам вариант.


Но есть подозрение, что "верное сопоставление" лучше делать в программе при выдаче результата.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson