首先,如果这个问题(我在stackoverflow中的第一个)是重复的并且我找不到它,那么道歉。我是全新的,所以仍在学习绳索。
我有一个包含4列的表格:
C1 C2 C2 C4
-------------------
1 11 111 1111
1 11 222 1111
1 22 222 2222
1 22 444 2222
1 33 444 3333
2 22 333 2222
2 33 333 3333
2 33 333 4444
2 44 444 1111 -- start range
2 44 444 4444
3 11 111 2222
3 11 222 2222 -- end range
3 22 333 2222
3 22 444 2222
4 11 111 4444
4 11 222 1111
4 44 222 2222
4 44 333 1111
如何选择所有行 “开始范围”和“结束范围”?
我这样做的方式就是这样,但我想知道是否有更好的方法?
select * from Table1
where
-- start range
Col1 < 2
or
Col1 = 2 and Col2 < 44
or
Col1 = 2 and Col2 = 44 and Col3 < 444
or
Col1 = 2 and Col2 = 44 and Col3 = 444 and Col4 < 1111
-- end range
or
Col1 > 3
or
Col1 = 3 and Col2 > 11
or
Col1 = 3 and Col2 = 11 and Col3 > 222
or
Col1 = 3 and Col2 = 11 and Col3 = 222 and Col4 > 2222
我想澄清一下,我所追求的是是否有办法避免所有这些“或”条件;像MySQL这样的东西:
where
(Col1, Col2, Col3, Col4) < (2, 44, 444, 1111)
or
(Col1, Col2, Col3, Col4) > (3, 11, 222, 2222)
另外,还有几点:
答案 0 :(得分:0)
我会做一个除了操作员(如狗仔队已经提到的)
Select *
from YourTable
Except
select *
from YourTable
where (C1 = 2 and C2 >= 44 and C3 >= 444 and C4 >= 1111)
or (C1 = 3 and C2 >= 11 and C3 <= 222 and C4 <= 2222)