您好我正在从java应用程序调用SQL quires,因为表有大量数据需要花时间从java端处理。现在我正在调用1000个1000条记录
SELECT t1.col1,t1.col2,t2.col1,t2.col2 FROM(SELECT rownum AS rn,
t1.col1,
t1.col2,
t2.col1,
t2.col2 FROM table1 t1,
table2 t2 WHERE t1.id=t2.id) WHERE rn BETWEEN ? AND ?;
但我还有一个查询具有不同的值,如下面的
SELECT t1.col1,t1.col2,t2.col1,t2.col2 FROM(SELECT rownum AS rn,
distinct t1.col1,
t1.col2,
t2.col1,
t2.col2 FROM table1 t1,
table2 t2 WHERE t1.id=t2.id) WHERE rn BETWEEN ? AND ?;
但是这个查询给出了错误,不允许添加rownum AS作为distinct。请问您能帮助我们解决上述用例吗?
答案 0 :(得分:1)
在 oracle 数据库中,DISTINCT
关键字只能直接放在SELECT
关键字后面或COUNT
函数内。
此外,您的SQL将导致不一致的结果,因为在 oracle 数据库中,如果没有明确的ORDER BY
子句,则无法保证记录的顺序。
您也无法从内部选择中访问tabla别名,因此如果不同表中的列具有相同的列名,则必须应用列别名。
最好的解决方案是添加另一层嵌套选择:
SELECT t1_col1, t1_col2, t2_col1, t2_col2
FROM (
SELECT rownum AS rn, inner_tab.*
FROM (
SELECT distinct t1.col1 AS t1_col1,
t1.col2 AS t1_col2,
t2.col1 AS t2_col1,
t2.col2 AS t2_col2
FROM table1 t1,
table2 t2
WHERE t1.id=t2.id
ORDER BY 1 -- you have to decide!
) inner_tab
) WHERE rn BETWEEN ? AND ?;