0

我有表“OcjeneKorisnika”,其中包含Korisnik_ID,Artikl_IDOcjena_ID字段。在表中,我输入Korisnik_ID 12了哪些订单文章Arikl_ID 9及其Artikl_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_ID11 具有9 和13 的值,但Ocjena_ID1、2 、... 仅具有9 的值,而不具有13 的值(在表中)Artikl_IDArtikl_IDKorisnik_IDKorisnik_IDArtikl_IDArtikl_ID

如何显示所有Korisnik_ID具有(9 和 13)值的所有值并排除Ocjena_ID仅具有一个值(9 或 13)的值?Artikle_IDKorisnik_IDsArtikl_ID

示例源数据:

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
4

1 回答 1

0

您的问题描述似乎与示例数据不太匹配(来自您的评论)

此查询将返回至少同时具有 9 和 13 的行Artikl_ID(但可能有更多类似Korisnik_ID10 也有Artikl_ID15 的行)。

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

如果这不是您要查找的内容,那么您应该编辑问题并尝试阐明您想要的内容。

于 2015-08-26T01:07:15.703 回答