获取未包含在子集中的超集记录(互斥)

时间:2012-03-10 04:01:38

标签: sql

我有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的超集(它是已经清点的项目表)。有没有办法从group1中的table A table B获取SELECT itemid, itemname, itemgroup FROM tableA WHERE itemid NOT IN (SELECT itemid FROM tableB WHERE invid = parameter) 的记录列表?不确定是否有一个设置操作来从超级集中获取未包含在子集中的记录(互斥)?

目前我正在使用以下代表性查询。这是实现这一目标的正确方法吗?我目前在SQL服务器上工作,但也很欣赏有关Oracle和MySQL的答案。

{{1}}

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

您也可以进行外部联接。