表上的差异操作

时间:2013-07-03 19:44:33

标签: sql set

DB - Oracle和MSSQL

如何获得差异B? A是我需要的 - 但是如果B中存在类似的记录,则不要显示它。 这里类似意味着2列相同。 [这使得它独特btw] 我所知道的关于A和B的所有内容都是有2列组合是UNIQUE记录。 在下面的例子中说出国家和城市。它可能有完全不同的列,但每个国家和城市有一条记录,我需要在其上进行差异操作。

我有2张桌子,其中一张表示我感兴趣的国家和城市。

A

Country City       Population Dentiy
USA     NewYork    10 mil
USA     Nevada     1  mil
Usa     Penn       3  mil

另一张表格上写着“我有一些受调查城市的名单,如果你有这个表中的数据你没有做任何事,我们会为你得到它”。

Usa   NewYork
SA    Capetown

我想要A差异B,即A中存在但不存在B的事物。 A也可能有其他列...如果A中的国家城市在B中,我不想要那个记录。 我如何实现这一目标?

PS:表A和B可能是动态计算机的!使用子查询,所以我可以使用A as和B作为...

* A是动态生成的表,与B * 相同,因此我需要使用合适的别名。答案应该假设这个先决条件。

1 个答案:

答案 0 :(得分:1)

A减B:

SELECT 
  a.*
FROM a
LEFT OUTER JOIN b ON (a.key = b.key)
WHERE b.key IS NULL

或(MSSQL):

SELECT col1,col2,col3 FROM a
EXCEPT
SELECT col1,col2,col3 FROM b