SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 15.03.2010 13:49:14

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Оператор IN исключает дублирующие поля

Ребята, привет всем!

Помогите, пожалуйста, разобраться с оператором IN.

Запрос 1:


mysql> select id from phrases where 1;
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
|  3 |
|  3 |
|  4 |
|  4 |
+----+
 
Запрос 2:

mysql> select word from words where id in (select id from phrases where 1);
+--------+
| word   |
+--------+
| dog    |
| cat    |
| biting |
| louse  |
+--------+
 
То есть результат не включает дублирующие words.id. Как правильно сделать, чтобы результат был:

+--------+
| word   |
+--------+
| dog    |
| cat    |
| biting |
| biting |
| biting |
| louse  |
| louse  |
+--------+
 

Неактивен

 

#2 15.03.2010 13:53:29

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

Re: Оператор IN исключает дублирующие поля

select word from words join phrases using(id);

Неактивен

 

#3 15.03.2010 14:06:12

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Оператор IN исключает дублирующие поля

vasya написал:

select word from words join phrases using(id);

Спасибо за помощь, но это я опрометчиво слишком упростил первый запрос. На самом деле мой запрос 1 возвращает не все id слов из таблицы words... Скажем запрос 1 вернул следующую таблицу:


+----+
| id |
+----+
|  1 |
|  3 |
|  3 |
|  4 |
|  4 |
+----+
 

Отредактированно FiMko (15.03.2010 14:06:52)

Неактивен

 

#4 15.03.2010 14:08:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оператор IN исключает дублирующие поля

where условия на первую таблицу

Неактивен

 

#5 15.03.2010 14:20:04

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Оператор IN исключает дублирующие поля

Попытаюсь объяснить подробнее...

Таблица:


mysql> select * from words;
+----+--------+---------+
| id | lng_id | word    |
+----+--------+---------+
|  1 |      2 | dog     |
|  2 |      1 | cat     |
|  3 |      2 | biting  |
|  4 |      2 | louse   |
+----+--------+---------+
 
Запрос:
mysql> select word from words where id in (1,1,2);
+--------+
| word   |
+--------+
| dog    |
| cat    |
+--------+
 
а хочу:

+--------+
| word   |
+--------+
| dog    |
| dog    |
| cat    |
+--------+
 

Отредактированно FiMko (15.03.2010 14:44:24)

Неактивен

 

#6 15.03.2010 15:13:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оператор IN исключает дублирующие поля

Если нужно именно через IN, то нельзя. Если список получается через
WHERE из другой таблицы, то через JOIN — так, как показал Вася.

Неактивен

 

#7 15.03.2010 15:17:20

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

Re: Оператор IN исключает дублирующие поля

Начнем по второму кругу. Перепишите запрос через JOIN. wink

select word from words join (select 1 as id union all select 1 union all select 2) t using(id);
 

Неактивен

 

#8 15.03.2010 15:21:51

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Оператор IN исключает дублирующие поля

Кстати, если выписывать кривые конструкции руками, то предлагаю такую
конструкцию:

SELECT 'dog' AS `word` UNION ALL SELECT 'dog' UNION ALL SELECT 'cat';


Полезность такая же, как и в случае набирания единичек из кода, но короче big_smile

Неактивен

 

#9 15.03.2010 15:26:01

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

Re: Оператор IN исключает дублирующие поля

Зато мой вариант красивше и на первый взгляд кажется, что написано что-то умное cool

Неактивен

 

#10 15.03.2010 15:44:49

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: Оператор IN исключает дублирующие поля

И снова спасибо... Мдяя, многое пока неочевидно для меня в этом языке smile

Отредактированно FiMko (15.03.2010 15:45:58)

Неактивен

 

Board footer

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