是否有SQL构造或技巧来执行以下操作:
SELECT i WHERE i BETWEEN 0 AND 10;
我的第一个想法是创建一个临时表,例如:
CREATE TABLE _range ( i INT PRIMARY KEY );
并填写
INSERT INTO _range VALUES 0;
INSERT INTO _range VALUES 1;
等。
有更好的方法吗?
更新:
我在这种特殊情况下使用sqlite,但我对一般答案很感兴趣。
答案 0 :(得分:1)
你在使用什么数据库?运算符之间通常是SQL的合法语法。我们一直用它来表示日期范围。
来自http://www.w3schools.com/Sql/sql_between.asp
SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2
答案 1 :(得分:1)
非常有趣的问题。这是一个丑陋的黑客,除非你的范围非常小,否则可能毫无用处......
select * from (
select 1 as num UNION
select 2 as num UNION
select 3 as num UNION
select 4 as num UNION
select 5 as num UNION
select 6 as num UNION
select 7 as num UNION
select 8 as num UNION
select 9 as num UNION
select 10 as num
) t ;
+-----+
| num |
+-----+
| 1 |
| 2 |
....
| 9 |
| 10 |
+-----+
10 rows in set (0.00 sec)
编辑:好的,所以我开始思考为什么不使用交叉连接。所以,这是另一个hack,这个很快会在内存表中占据很大的数量,并且可能相当不错。
select POW(2,0)*t0.num + POW(2,1)*t1.num + POW(2,2)*t2.num + POW(2,3)*t3.num
as num
from (
select 0 as num UNION
select 1 as num
) t0, (
select 0 as num UNION
select 1 as num
) t1, (
select 0 as num UNION
select 1 as num
) t2, (
select 0 as num UNION
select 1 as num
) t3
order by num ;
+------+
| num |
+------+
| 0 |
| 1 |
....
| 14 |
| 15 |
+------+
16 rows in set (0.00 sec)
很容易达到2的任何幂,并且应该足够快。
答案 2 :(得分:1)
MS SQL 您可以使用 CTE :
;with numbs as
(
select 1 as col
union all
select col + 1 from numbs
where col < 10
)
select * from numbs
答案 3 :(得分:0)
您没有指定您使用的dbms,但使用Oracle
您可以使用CONNECT BY
:
SELECT ROWNUM-1 i
FROM dual
CONNECT BY ROWNUM <= 10 + 1
答案 4 :(得分:0)
乘以记录的SQL语法是CROSS JOIN 我不确定你的要求和评论,但我想你是想这样做。
我做了类似的事情,用一个日期戳作为字符串“YYYYMM”填充表格,为期20年。