2013-01-09 5 views
0

У меня есть стол «OcjeneKorisnika», который состоит из Korisnik_ID, Artikl_ID и Ocjena_ID полей. В таблице у меня есть запись Korisnik_ID 12, которая заказывает статьи Arikl_ID 9 и Artikl_ID 13 и некоторые значения в Ocjena_ID для ее.Удалить предметы, которые не соответствуют всем требованиям

Запроса ниже получить все Korisnik_ID, Artikle_ID и Ocjena_ID кроме Korisnik_ID 12

SELECT Korisnik_ID, 
     Artikl_ID, 
     Ocjena_ID 
FROM OcjeneKorisnika 
WHERE (Artikl_ID IN 
     (SELECT Artikl_ID 
      FROM Kupac_Narudzba 
      WHERE (Korisnik_ID = 12))) EXCEPT 
    SELECT Korisnik_ID, 
     Artikl_ID, 
     Ocjena_ID 
    FROM OcjeneKorisnika WHERE Korisnik_ID = 12 
ORDER BY Korisnik_ID 

Например korisnik_ID 11 имеет значение в Ocjena_ID для Artikl_ID 9 и 13, но Artikl_IDKorisnik_ID 1, Korisnik_ID 2, ... имеет значение только для Artikl_ID 9, а не для Artikl_ID 13 (в таблице)

Как показать все Korisnik_ID, которые имеют значения в Ocjena_ID для обоих Artikle_ID (9 и 13) и не включают Korisnik_IDs, которые имеют только значения для одного Artikl_ID (9 или 13)?

Пример исходных данных:

Korisnik_ID | Artikl_ID | Ocjena_ID 
1 | 9 | 3 
2 | 9 | 4 
2 | 13 | 5 
9 | 9 | 2 
10 | 9 | 3 
10 | 13 | 4 
10 | 15 | 2 
12 | 9 | 3 
12 | 13 | 2 

мне нужно иметь выход:

Korisnik_ID | Artikl_ID | Ocjena_ID 
2 | 9 | 4 
2 | 13 | 5 
10 | 9 | 3 
10 | 13 | 4 
+1

Уход достаточно, чтобы обновить свой вопрос с помощью некоторых данных образца и ожидаемых результатов. – bonCodigo

+0

В таблице у меня есть: Korisnik_ID | Artikl_ID | Ocjena_ID 1 | 9 | 3 2 | 9 | 4 2 | 13 | 5 9 | 9 | 2 10 | 9 | 3 10 | 13 | 4 10 | 15 | 2 12 | 9 | 3 12 | 13 | 2 Мне нужно иметь выход: Korisnik_ID | Artikl_ID | Ocjena_ID 2 | 9 | 4 2 | 13 | 5 10 | 9 | 3 10 | 13 | 4 Tnx заранее. – user1952467

+0

У меня есть проблема с форматированием комментария выше!? – user1952467

ответ

0

Описание проблемы не совсем, кажется, совпадают с данными выборки (из Вашего комментария)

Этот запрос вернет строки, которые имеют как минимум 9 и 13 для Artikl_ID (но могут иметь больше, чем Korisnik_ID 10, у которого также есть Artikl_ID 15).

with matches as (
    select Korisnik_ID from OcjeneKorisnika where Artikl_ID in (9,13) 
    group by Korisnik_ID having count(distinct Artikl_ID) = 2 
) 

select o.* from OcjeneKorisnika o 
join matches m on o.Korisnik_ID = m.Korisnik_ID 
where o.Artikl_ID in (9,13) 

Учитывая ваши данные выборки результат будет:

Korisnik_ID Artikl_ID Ocjena_ID 
----------- ----------- ----------- 
2   9   4 
2   13   5 
10   9   3 
10   13   4 
12   9   3 
12   13   2 

Если это не то, что вы ищете, то вы должны изменить вопрос и попытаться выяснить, что вы хотите.

+0

О, мой, не заметил, что вопрос был задан более двух лет назад ...Угадай, что ОП давно ушла. – jpw

Смежные вопросы