Tôi nhận được một lỗi SQL và cố gắng giải quyết, bất kỳ con trỏ sẽ là hữu ích,Oracle chọn truy vấn với lỗi bên trong chọn truy vấn
// này được thực hiện
SELECT empid FROM employees WHERE deptid IN (10,20,30,40);
// này được thực hiện
SELECT deptid FROM department WHERE description LIKE '%application%'
ORDER BY createddate DESC
nhưng truy vấn dưới đây ném lỗi:
SELECT empid FROM employees WHERE deptid IN (SELECT deptid FROM department WHERE description LIKE '%application%'
ORDER BY createddate DESC);
lỗi: ORA-00907: thiếu ngoặc đúng 00907. 00000 - "ngoặc đúng mất tích"
Cập nhật: 14/07:
Đang cập nhật với các giải pháp chính xác từ @dasblinkenlight:
The problem is placing ORDER BY in the WHERE clause subquery. SQL syntax does not allow you to order elements of the subquery in the WHERE clause, because it does not change the result of the query overall
bài viết này cũng giải thích nhiều khái niệm - http://oraclequirks.blogspot.com/2008/01/ora-00907-missing-right-parenthesis.html
"ORA-00907: missing right parenthesis Clearly when one gets a message like this, the first reaction is probably to verify what parenthesis has been left out, but unfortunately there are no missing parentheses at all in this statement.
To cut it short, the untold syntax quirk is summarized as follows: don't use ORDER BY inside an IN subquery.
Now, one may object that indeed it doesn't make sense to use the ORDER BY inside an IN clause, which is true, because Oracle doesn't care about the row order inside an IN clause:"
Tôi đã thử câu lệnh SQL với mệnh đề WHERE và '=' thay vì 'IN' và nó vẫn ném lỗi: 'missing right parenthesis
'.
kết luận 1:
"Không sử dụng ORDER BY trong mệnh đề WHERE subquery" hay "truy vấn phụ trong mệnh đề where không được phép sử dụng ORDER BY trong Oracle"
Kết luận 2
trường nghiên cứu này cũng cho thấy kịch bản mà chúng ta nên đi cho THAM GIA hơn là chọn subquery
mất xem bài viết này: http: //oraclequirks.blogspot.com/2008/01/ora-00907-missing-right-parenthesis.html –
wow, bài viết rất hay, thông tin bổ sung, Cảm ơn bạn rất nhiều @beherenow – spiderman
kết luận của bạn 1 không hoàn toàn chính xác. các truy vấn con trong mệnh đề where ĐƯỢC cho phép sử dụng thứ tự theo, NHƯNG chỉ trong trường hợp thứ tự ảnh hưởng đến tập kết quả - ví dụ, nơi nó cung cấp lọc đầu, như trong http://sqlfiddle.com/#!4/d41d8 . trong trường hợp khác nó ném ora-907. bạn cũng có thể muốn xem MOS bài viết 731577.1, mà tôi vừa tìm thấy - chúng dường như có rất nhiều SR về điều này để họ làm rõ điều này) –