假设我的表格包含国家,州和其他列的列。 我需要过滤记录
Country = 'USA' and STATE = 'LA'
(美国所有其他州应该来)和 Country = 'CANADA' and state = 'ALBERTA'
(加拿大所有其他州应该来)和
我不希望任何country = 'GERMANY'
的记录(德国没有州应该来)
不应提取所有这些记录。
你能问我一下吗?
答案 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'))