0

Korisnik_IDArtikl_IDおよびOcjena_IDフィールドで構成されるテーブル「OcjeneKorisnika」があります。テーブルには、記事を注文するエントリとKorisnik_ID 12、そのためのいくつかの値があります。Arikl_ID 9Artikl_ID 13Ocjena_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 にOcjena_IDArtikl_ID9 とArtikl_ID13の値がありますがKorisnik_IDKorisnik_ID1、2、... にはArtikl_ID9 の値のみがあり、Artikl_ID13 の値はありません ( 表 )

両方( 9 と 13 )のKorisnik_ID値を持つものをすべて表示し、一方( 9 または 13 )の値しか持たないものを除外するにはどうすればよいですか?Ocjena_IDArtikle_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(ただし、 15Korisnik_IDもある 10のように多くなる場合がありますArtikl_ID)。

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 に答える