хитрый запрос SELECT

Corvin

Новичок
хитрый запрос SELECT

Помогите, никак не могу понять как составить такой запрос:

Таблица вида:
---------------
id | cat | sup |
---------------
1 | 5 | 22 |
2 | 5 | 18 |
3 | 5 | 11 |
4 | 6 | 23 |
5 | 6 | 11 |
6 | 7 | 11 |
7 | 7 | 18 |
8 | 7 | 19 |
......
-------------------
Необходимо получить номера cat только те, в
которых sup='11' AND sup='18', тоесть результат 5 и 7
заранее благодарен
 

Steamroller

Новичок
что-то вроде:
select distinct t1.cat from table t1, table t2 where t1.sup='11' and t2.sup='18' and t1.cat=t2.cat;

(подправил)
 

sage

Новичок
Steamroller
из примера разве не видно, что таблица одна? Причём здесь t2?
 

Steamroller

Новичок
sage, нет, table - это типа имя таблицы, а t1 и t2 - алиасы. То есть таблица сама на себя джойнится (некоторые это пишут как table AS t1 CROSS JOIN table AS t2).
 

.des.

Поставил пиво кому надо ;-)
При условии, что sup в пределах cat имеет уникальные значения
Код:
SELECT cat FROM tbl 
WHERE sup IN (11,18) GROUP BY cat HAVING COUNT(*) = 2;
Если не так, то добавляем distinct
Код:
SELECT cat FROM tbl 
WHERE sup IN (11,18) GROUP BY cat HAVING COUNT(DISTINCT(sup)) = 2;
* 2 равно количеству нужных значений sup
 

tf

крылья рулят
непойму толи меня опять глючит толи окружающих
[SQL]SELECT * FROM table WHERE sup='11' AND sup='18'[/SQL]
и при чем тут DISTING и GROUP BY в вопросе ничего об этом не указано что надо уникальные. и не факт что они помогу вернуть результат 5 и 7 может быть они вернут 2 и 3
четко ничего не было указано

?да а в чем хитрость запроса
 

chira

Новичок
tf
результат твоего запроса всегда будет давать пустое множество.
 
SaNo
не для этого случая...
в вопросе приведен пример, того, что должно быть получено...
 

tf

крылья рулят
chira дело не а AND или OR. да хоть IN() не в том дело

зачем distinct и order by лепить когда не трубется?
 

.des.

Поставил пиво кому надо ;-)
2 tf, SaNo внимательнее читайте условие задачи. OR и IN вернет cat 5, 6, 7 , а необходимо 5, 7.
 

tf

крылья рулят
.des. а о том и говорю что надо читать внимательней. какие главные критерии по получению 5и 7? у нас только sup='11' AND sup='18'
 

.des.

Поставил пиво кому надо ;-)
tf в Туле уже разгар дня, пора бы проснуться.
... sup='11' AND sup='18' - empty set в любом случае
... sup='11' OR sup='18' - вернет нам больше, чем требуется.
 

tf

крылья рулят
.des.
да ты меня не понял : прав вариант sup='11' OR sup='18'
с AND я просто опечатался вначале
 
Сверху