过滤记录

时间:2014-12-15 07:19:34

标签: sql oracle

假设我的表格包含国家,州和其他列的列。 我需要过滤记录

  • Country = 'USA' and STATE = 'LA'(美国所有其他州应该来)和
  • Country = 'CANADA' and state = 'ALBERTA'(加拿大所有其他州应该来)和

  • 我不希望任何country = 'GERMANY'的记录(德国没有州应该来)

不应提取所有这些记录。

你能问我一下吗?

1 个答案:

答案 0 :(得分:2)

我认为这里棘手的部分是找到如何表达符合某些标准的WHERE子句而不是

您可以使用De Morgan's laws

  

"不是(A和B)" "(不是A)或(不是B)"

     

"不是(A或B)" "(不是A)和(不是B)"

所以补充

... WHERE (Country = 'USA' and STATE = 'LA') 
          OR (Country = 'CANADA' and state = 'ALBERTA')
          OR (country = 'GERMANY')

... WHERE (Country <> 'USA' or STATE <> 'LA') 
          AND (Country <> 'CANADA' or state <> 'ALBERTA')
          AND (country <> 'GERMANY')

如果你想用关系代数解决这个问题,你可能正在寻找antijoin。这在Oracle中使用NOT IN运算符表示(请参阅Oracle's documentation):

SELECT ....
WHERE theID NOT IN (SELECT theID WHERE (Country = 'USA' and STATE = 'LA') 
          OR (Country = 'CANADA' and state = 'ALBERTA')
          OR (country = 'GERMANY'))