【问题标题】:Get super set records not contained in a subset (mutual exclusion)获取不包含在子集中的超集记录(互斥)
【发布时间】:2012-03-10 04:01:37
【问题描述】:

我有一个table A

itemid     itemname     itemgroup
  1        item1        group1
  2        item2        group1
  3        item3        group1

还有一个table B

itemid     itemname     itemgroup     invid
  1        item1        group1          1
  3        item3        group1          1

在我的例子中,table Btable A 的子集,或者table Atable B 的超集(它是一个已经盘点的项目表)。有没有办法从table A 中获取group1 的记录列表,而table B 中不存在?不确定是否有集合操作从不包含在子集中的超集中获取记录(互斥)?

目前我正在使用以下代表性查询。这是实现这一目标的正确方法吗?我目前在 SQL Server 中工作,但也希望得到有关 Oracle 和 MySQL 的答案。

SELECT itemid, itemname, itemgroup 
  FROM tableA 
 WHERE itemid NOT IN (SELECT itemid 
                        FROM tableB 
                       WHERE invid = parameter)

【问题讨论】:

  • @OMGPonies 已编辑问题。目前正在使用 SQL 服务器,但是否可以使用 Oracle 或 MySQL。

标签: sql


【解决方案1】:

SELECT     * 
FROM       TableA A
LEFT JOIN  TableB B ON A.itemid = B.itemid AND B.invid = parameter
WHERE      B.itemid IS NULL

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

【讨论】:

【解决方案2】:

我认为您的查询没问题,但您也可以这样做:

SELECT * FROM tableA a
 WHERE NOT EXISTS ( SELECT b.itemid FROM tableB b WHERE b.itemid = a.itemid 
                       AND b.invid = parameter )

你也可以做一个外连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 2014-04-28
    • 2014-12-23
    • 2013-04-08
    • 2019-04-04
    • 2019-12-08
    • 1970-01-01
    相关资源
    最近更新 更多