Задача на пересечение, есть ли оператор отличный от InterSelect?

Guest111

Guest
Задача на пересечение, есть ли оператор отличный от InterSelect?

Имеется некоторая таблица:

Код:
p_key | p_value
1 | a
2 | b
1 | c
2 | c
3 | c
1 | b
нужно вывести все идентификаторы, у которых в значениях p_value присутствует одновременно "a", "b" и "c". В моем примере вывести нужно еденицу, т.к. только у еденицы:
Код:
1 | a
1 | c
1 | b
все три символа присутствуют...

Хотел попробовать решить этот вопрос через TIMES (декартово произведение), но в MySQL его не оказалось, а хочется составить универсальный запрос..
 

zerkms

TDD infected
Команда форума
если нет повторений для пар p_key - p_value, то например:

SELECT COUNT(`p_value`) AS `cnt`, `p_key` FROM `table` WHERE `p_value` IN ('a', 'b', 'c') HAVING `cnt` = 3 GROUP BY `p_key`;

ps: mysql под рукой нет проверить корректность
 

Leksi

Новичок
я бы сделала
[SQL]
select `table`.`id` from `table`, `table` as table1, `table` as table2
where `table`.`p_key`=`table1`.`p_key` AND `table1`.`p_key`=`table2`.`p_key`
AND `table`.`p_value` = 'a' AND `table1`.`p_value` = 'b' AND `table2`.`p_value` = 'c'
[/SQL]

Тоже можно написать с использованием INNER JOIN.
 

Guest111

Guest
Leksi
Спасибо большое, всё сработало отлично!!!
 
Сверху