помогите с запросом

wand

Новичок
помогите с запросом

Здравствуйте

есть таблица test состоящая из двух полей
например
field1 c содержимым : 1 2 1 4 1 2
field2 c содержимым : 1 1 2 2 3 3

нужно выбрать все значения из поля field2
которым в поле field1 соответствуют значения 1 и 2
(обязательно и то и другое)
т.е. ответ должен быть 1 и 3

подскажите пожалуйста как это делается?
помнится есть как минимум 2 способа
1 использовать having
2 использовать алиасы к таблице

но к сожалению не могу вспомнить синтаксис ни одного из них (а может и еще какой нибудь способ есть?)
 

Апельсин

Оранжевое создание
я что-то не понимаю - эти значения для field1 и field2, это все содержимое 1й строки в таблице или это разные строки: (1,1), (2,1), (1,2) и т.д.
?
 

wand

Новичок
Автор оригинала: Апельсин
я что-то не понимаю - эти значения для field1 и field2, это все содержимое 1й строки в таблице или это разные строки: (1,1), (2,1), (1,2) и т.д.
?
Хм мои извинения
просто не придумал как лучше
показать таблицу

содержимое полей это простые числа
может в таком виде понятней будет

field1 | field2
----------------
1 | 1
2 | 1
1 | 2
4 | 2
1 | 3
2 | 3
 

baev

‹°°¬•
Команда форума
выбрать все значения из поля field2
которым в поле field1 соответствуют значения 1 и 2

1 использовать having
2 использовать алиасы к таблице
Гхм...
Либо постановка задачи неполная, либо ...

Код:
skipped
P.S. А! Понял. Всё дело в "обязательно и то и другое"...
 

Profic

just Profic (PHP5 BetaTeam)
Где-то так:
[sql]select t1.field2 from test as t1 inner join test as t2 on t1.field2 = t2.field2 and t1.field1 != t2.field1 where t1.field1 = 1 and t2.field1 = 2[/sql]
 

chira

Новичок
должно быстрее работать:
Код:
select t.field2
from t
group by t.field2
having avg(t.field1 IN (1,2)) = 1
 

alpine

Новичок
...

-~{}~ 24.07.05 11:01:

chira
Если тестовые данные:
Код:
field1 	field2 	
 2	1	
 1	1	
 1	2	
 4	2	
 1	3	
 1	3
то запрос отработает не правильно, вернет 1 и 3, а запрос Profic вернет только 1 что есть правильно, так как field1 соответствуют значения 1 и 2
(обязательно и то и другое)
.
 

chira

Новичок
alpine
верно,
ещё можно добавить сочетание 3,1 - результат тоже измениться
для использования такого селекта должно быть условие уникальности сочетания полей UNIQUE(field1,field2)
правильнее так:
Код:
select t.field2
from t
where t.id IN (1,2)
group by t.field2
having avg(t.field1 IN (1,2)) = 1
если нет уникальности можно использовать такой вариант
Код:
select t.data_id
from t
where t.id IN (1,2)
group by t.data_id
having count(distinct t.id)=2;
 
Сверху