SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 18.03.2012 21:11:34

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

Помогите создать запрос

Доброго времени суток!

Помогите, пожалуйста, составить вопрос. Честно, у самого никаких идей не появилось.

Имеется таблица:

mysql> show create table table1;
+--------+-----------------------------+
| Table  | Create Table                |
+--------+-----------------------------+
| table1 | CREATE TABLE `table1` (     |
|  `id1` int(11) NOT NULL,             |
|  `id2` int(11) NOT NULL              |
| ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+-----------------------------+
mysql> select * from table1;
+-----+-----+
| id1 | id2 |
+-----+-----+
|   1 | 100 |
|   1 | 102 |
|   2 | 100 |
|   2 | 101 |
|   2 | 102 |
|   3 | 100 |
|   3 | 105 |
+-----+-----+

Необходим запрос, который бы извлекал для заданного множества 100;102 из приведенной таблицы table1 id1 = 1 и id1 = 2, т.к. в соответствие этим строкам в первой колонке находятся значения 100 и 102 во второй колонке таблицы. Но не id1 = 3, поскольку для него есть только значение id2 = 100, но нет 102.

Положительно ничего не могу выдумать. Был бы признателен за помощь.

Отредактированно FiMko (18.03.2012 21:11:53)

Неактивен

 

#2 18.03.2012 21:16:12

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

Re: Помогите создать запрос

select id1 from table1 where id2=100 or id2=102 group by id1 having count(*)=2;

Неактивен

 

#3 18.03.2012 22:02:27

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

Re: Помогите создать запрос

vasya написал:

select id1 from table1 where id2=100 or id2=102 group by id1 having count(*)=2;

Великолепно! Большое спасибо!

Неактивен

 

#4 18.03.2012 22:38:16

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

Re: Помогите создать запрос

vasya написал:

select id1 from table1 where id2=100 or id2=102 group by id1 having count(*)=2;

Но если в таблице table1 есть еще одна строка id1=3, id2=100, тогда id1=3 вернется также по этому запросу (результирующее множество: id1 = 1, 2, 3). От таких случаев можно как-то "защититься"?

---
Добавлено:
Может что-то вроде:

select id1 from table1 where id2=100 or id2=102 group by id1 having count(distinct id2)=2;

Отредактированно FiMko (06.06.2013 21:09:23)

Неактивен

 

#5 18.03.2012 22:48:13

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

Re: Помогите создать запрос

FiMko написал:

Может что-то вроде:

select id1 from table1 where id2=100 or id2=102 group by id1 having count(distinct id2)=2;

Нет, не пойдет, ибо необходимо чтобы согласно запросу выполнялось условие "дай мне все id1 в соответствие которым есть id2 равное 100 И 102 не важно в каком количестве".

Так для таблицы:

mysql> select * from table1;
+-----+-----+
| id1 | id2 |
+-----+-----+
|   1 | 100 |
|   1 | 102 |
|   2 | 100 |
|   2 | 101 |
|   2 | 102 |
|   2 | 102 |
|   3 | 100 |
|   3 | 100 |
|   3 | 105 |
+-----+-----+

Должно вернуться id1=1 (есть и id2=100 и id2=102) и id1=2 (есть и id2=100 и id2=102, причем id2=102 встречается даже дважды), но не id1=3 (у него нет id2=102!).

Отредактированно FiMko (18.03.2012 22:48:56)

Неактивен

 

#6 18.03.2012 23:04:24

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

Re: Помогите создать запрос

FiMko написал:

Нет, не пойдет, ибо необходимо чтобы согласно запросу выполнялось условие "дай мне все id1 в соответствие которым есть id2 равное 100 И 102 не важно в каком количестве".

У меня родилось только уродливое:

SELECT DISTINCT table1.id1 FROM table1
JOIN table1 AS table1_2 ON table1_2.id2 = 102
WHERE table1.id2 = 100 AND table1.id1 = table1_2.id1;

Отредактированно FiMko (18.03.2012 23:08:32)

Неактивен

 

#7 18.03.2012 23:14:38

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

Re: Помогите создать запрос

FiMko написал:

FiMko написал:

Может что-то вроде:

select id1 from table1 where id2=100 or id2=102 group by id1 having count(distinct id2)=2;

Нет, не пойдет, ибо необходимо чтобы согласно запросу выполнялось условие "дай мне все id1 в соответствие которым есть id2 равное 100 И 102 не важно в каком количестве".

Так для таблицы:

mysql> select * from table1;
+-----+-----+
| id1 | id2 |
+-----+-----+
|   1 | 100 |
|   1 | 102 |
|   2 | 100 |
|   2 | 101 |
|   2 | 102 |
|   2 | 102 |
|   3 | 100 |
|   3 | 100 |
|   3 | 105 |
+-----+-----+

Должно вернуться id1=1 (есть и id2=100 и id2=102) и id1=2 (есть и id2=100 и id2=102, причем id2=102 встречается даже дважды), но не id1=3 (у него нет id2=102!).

Вы сами ответили на вопрос.

select id1 from table1 where id2=100 or id2=102 group by id1 having count(distinct id2)=2;
Вернет именно то, что нужно, т.е. "все id1 в соответствие которым есть id2 равное 100 И 102 не важно в каком количестве"

Неактивен

 

#8 18.03.2012 23:21:01

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

Re: Помогите создать запрос

vasya написал:

Вы сами ответили на вопрос.

select id1 from table1 where id2=100 or id2=102 group by id1 having count(distinct id2)=2;
Вернет именно то, что нужно, т.е. "все id1 в соответствие которым есть id2 равное 100 И 102 не важно в каком количестве"

Ммм... засиделся я видать, пора передохнуть smile Спасибо!

Неактивен

 

Board footer

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