【问题标题】:Remove items which don't fulfill all requirement删除不满足所有要求的项目
【发布时间】:2013-01-09 06:46:30
【问题描述】:

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

下面的查询检索除Korisnik_ID 12 之外的所有Korisnik_IDArtikle_IDOcjena_ID

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 和 Artikl_ID 13 但 Korisnik_ID 1,Korisnik_ID 2, ... 仅对于 Artikl_ID 9 有值,而不是对于Artikl_ID13(表中)

如何显示所有Ocjena_ID 的值在Artikle_ID(9 和13)中的Korisnik_ID 并排除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

【问题讨论】:

  • 请用一些示例数据和预期结果更新您的问题?
  • 在表中我有:Korisnik_ID |文章 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 |文章 ID | Ocjena_ID 2 | 9 | 4 2 | 13 | 5 10 | 9 | 3 10 | 13 |提前 4 Tnx。
  • 抱歉,上面的评论格式有问题!?
  • 很好............我的意思是like this你可以更新你的问题......非常抱歉没有给你一个例子你应该怎么做...... .

标签: sql sql-except


【解决方案1】:

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

此查询将返回 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

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

【讨论】:

  • 哦,天哪,没注意到这个问题是在两年多前提出的……猜想 OP 早已不复存在了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2017-12-27
  • 2016-12-04
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
相关资源
最近更新 更多