删除不符合所有要求的项目

时间:2013-01-09 06:46:30

标签: sql sql-except

我有“OcjeneKorisnika”表,其中包含Korisnik_IDArtikl_IDOcjena_ID字段。 在表格中,我有条目Korisnik_ID 12订阅文章Arikl_ID 9Artikl_ID 13以及Ocjena_ID中的一些值。

下面的查询会检索除Korisnik_ID以外的所有Artikle_IDOcjena_IDKorisnik_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_IDArtikl_ID 9和Artikl_ID 13 Korisnik_ID 1,Korisnik_ID 2,... 。只有Artikl_ID 9的值,而不是Artikl_ID 13(表中)

如何显示所有Korisnik_ID Ocjena_IDArtikle_ID的值Korisnik_IDs(9和13)以及排除Artikl_ID的{​​{1}}只有一个{{1}的值(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 个答案:

答案 0 :(得分:0)

您的问题描述似乎与样本数据(来自您的评论)相匹配

此查询将返回Artikl_ID至少同时包含9和13的行(但可能更像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

如果那不是您正在寻找的内容,那么您应该编辑问题并尝试澄清您想要的内容。