首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL问题:排除记录

SQL问题:排除记录
EN

Stack Overflow用户
提问于 2008-12-13 09:38:40
回答 4查看 505关注 0票数 2

我有一个数据库(NexusDB (假定符合SQL-92 )),其中包含一个项目表、一个类别表和一个多对多ItemCategory表,这只是一对键。正如您可能期望的那样,项目被分配到多个类别。

我希望所有的最终用户选择所有的项目是

ItemID | CategoryID

01 | 01

01 | 02

01 | 12

02 | 01

02 | 02

02 | 47

03 | 01

03 | 02

03 | 14

等等。

我希望能够选择分配给类别X、Y和Z但没有分配到类别P和Q的所有ItemID。

例如,对于上面的示例数据,假设我想获取分配给类别01或02但不是12的所有项(产生项02和03)。大致是这样的:

SELECT ItemID WHERE (CategoryID IN (01,02))

从集合中删除SELECT ItemID WHERE NOT (CategoryID = 12)

这可能是一个非常基本的SQL问题,但现在它把我难住了。如有任何帮助,敬请惠顾。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-13 09:52:12

您可以尝试使用EXCEPT

代码语言:javascript
复制
SELECT ItemID FROM Table
EXCEPT
SELECT ItemID FROM Table
WHERE
CategoryID <> 12
票数 2
EN

Stack Overflow用户

发布于 2008-12-13 17:50:03

我希望能够选择分配给类别X、Y和Z但没有分配给类别P和Q的所有ItemID。

我无法从SELECT上的NexusDB文档中确认它们是否支持子查询,但它们确实支持LEFT OUTER JOIN和GROUP BY。因此,下面是一个在这些限制下工作的查询:

代码语言:javascript
复制
SELECT i1.ItemID
FROM ItemCategory i1
  LEFT OUTER JOIN ItemCategory i2
    ON (i1.ItemID = i2.ItemID AND i2.CategoryID IN ('P', 'Q'))
WHERE i1.CategoryID IN ('X', 'Y', 'Z')
  AND i2.ItemID IS NULL
GROUP BY i1.ItemID
HAVING COUNT(i1.CategoryID) = 3;
票数 2
EN

Stack Overflow用户

发布于 2008-12-13 09:55:46

代码语言:javascript
复制
SELECT i.ItemID, ic.CategoryID FROM Item AS i
INNER JOIN ItemCategory ic
ON i.ItemID = ic.ItemID
WHERE ic.CategoryId = 1 OR ic.CategoryId = 2

当然,您需要在WHERE子句中输入您想要获取的类别。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/365045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档