我试图根据V.SITES_CODE
来解析我的查询。它在没有LENGTH
函数的情况下工作,但是对于函数,顺序是完全随机的。有人可以帮忙吗代码:
SELECT V.CODE_OF_HOLIDAY, V.SITES_CODE, A.SITES_NAME, D.DESCRIPTION
FROM ZZZ_SITES_VISITED V, ZZZ_SITES_AVAILABLE A, ZZZ_HOLIDAY_DETAILS H, ZZZ_DIFFICULTY_RATINGS D
WHERE V.CODE_OF_HOLIDAY = H.CODE_OF_HOLIDAY
AND A.SITES_CODE = V.SITES_CODE(+)
AND H.DIFFICULTY_RATING = D.HOLIDAY_DIFICULTY
AND H.CODE_OF_HOLIDAY = V.CODE_OF_HOLIDAY
AND LENGTH(D.DESCRIPTION) > 6;
答案 0 :(得分:2)
除非您明确指定order by
子句,否则绝对不能保证返回的行的顺序。当你省略length
条件时,按照预期的顺序得到它们的事实是完全巧合的,如果将表移动到不同的存储或重建索引,可能会破坏。
如果您希望按V.SITES_CODE
排序结果,则应明确说明:
SELECT V.CODE_OF_HOLIDAY, V.SITES_CODE, A.SITES_NAME, D.DESCRIPTION
FROM ZZZ_SITES_VISITED V, ZZZ_SITES_AVAILABLE A, ZZZ_HOLIDAY_DETAILS H, ZZZ_DIFFICULTY_RATINGS D
WHERE V.CODE_OF_HOLIDAY = H.CODE_OF_HOLIDAY
AND A.SITES_CODE = V.SITES_CODE(+)
AND H.DIFFICULTY_RATING = D.HOLIDAY_DIFICULTY
AND H.CODE_OF_HOLIDAY = V.CODE_OF_HOLIDAY
AND LENGTH(D.DESCRIPTION) > 6
ORDER BY V.SITES_CODE
答案 1 :(得分:1)
Oracle
没有任何默认sorting
。你必须明确指定ORDER BY
子句来回复排序。
添加,
ORDER BY V.SITES_CODE