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

prog_nt
Дата: 17.01.2013 23:07:01
Добрый ночь всем. Прошу помощи в составлении запроса. Возможно решение простое, давно не занимался запросами, да и не особо глубоко освоил sql. Не прошу полное решение, можно просто подсказать в сторону каких инструкций копать.
Смысл в следующем, имеется примерный набор данных (для простоты таблицу привожу плоскую):
idnamevalue
1ip10.200.1.8
1port24
2ip10.200.1.8
2port8
2vlan100
3ip10.200.1.8

Также набор искомых значений:
namevalue
ip10.200.1.8
port24


Нужно найти те записи исходной таблицы, в которой присутствуют все искомые данные, ни больше, ни меньше, ни каких-либо лишних данных. В данном случае это id = 1. В id = 2 лишние данные, в id = 3 не достает данных.
bochkov
Дата: 18.01.2013 03:33:22
как то так
SELECT * FROM table1 WHERE id NOT IN(

SELECT DISTINCT id 
FROM table1 t1
LEFT JOIN table2 t2 ON t1.name=t2.name AND t1.value=t2.value
WHERE t2.name IS NULL #id в которых лишние данные
UNION DISTINCT
SELECT DISTINCT id 
FROM table1 t1
 EXISTS(
     SELECT 1 FROM table2 t2
     LEFT JOIN table1 t3 ON t2.name=t3.name AND t2.value=t3.value  AND t3.id=t1.id
     WHERE t3.id IS NULL
     )  #id в которых не хватает данных
) 

возможно запрос надо допиливать - не проверял
так,
Дата: 18.01.2013 03:53:44
select a.id
from a left join b
on a.name=b.name and a.value=b.value
group by a.id
having count(b.name)=count(*)
   and count(b.name)=(select count(*) from b)