我有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 B
是table A
的一个子集,或者table A
是table 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}}
答案 0 :(得分:3)
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 )
您也可以进行外部联接。