我正在使用具有用於生成SQL查詢的自定義java實現的遺留系統。這不支持'IN'操作。 要實現「IN」我已經寫了類似SQL使用'OR'實現'IN'運算符
SELECT * from Q
WHERE IS_HIDDEN = 0 AND ID = 1
OR ID = 2 OR ID = 3 AND IS_DELETED = 0;
我知道,像下面的人會被罰款。
SELECT * from Q
WHERE IS_HIDDEN = 0 AND (ID = 1
OR ID = 2 OR ID = 3) AND IS_DELETED = 0 ;
這兩個都返回相同的結果,但我對SQL運算符優先級不太確定。我已經讀過並優先考慮 假設兩個SQL狀態碼是等價的,是否安全?
,我想寫的實際查詢是
SELECT * from Q
WHERE IS_HIDDEN = 0 AND ID IN(1, 2, 3) AND IS_DELETED = 0;
的DB的問題是Oracle 10g中。
更新:這是工作的原因是因爲oracle CBO重新排列where子句中的子條款。
你的問題是什麼?用'IN'查詢是正確的 – MartinB
現在的問題是兩個查詢與IN一樣。 – nikhil