在SQL中執行startswith(expression)
的適當方法是什麼?SQL startswith(使用`LIKE`)表達式
我可以用LIKE ((expression) || '%')
來做,但對我來說看起來不太好。
全面查詢是形式:
SELECT …, (SELECT COUNT(*)
FROM post AS child
WHERE child.path LIKE (post.path || '%')
AND child.depth >= post.depth)
FROM post WHERE …
我想這是最好使用LIKE
因爲DB索引這種情況。
您在編寫相關子查詢,你所擔心的類似條款看起來如何?爲什麼地球上你會關心這個陳述看起來不錯。在SQl語句中有三件事值得擔心:是否返回正確的結果,它是否表現良好(提示相關的子查詢通常不會,應該避免)並且它是安全的?看起來不錯,甚至沒有接近第四。 – HLGEM 2011-02-28 18:09:40
它的執行效果和它可能的一樣(實際上,這個特定的子查詢只對所有使用CASE WHEN的返回對象的子集完成)。其他的考慮也不是什麼大問題,雖然在其他類似的情況下,擔心安全性可能會導致同樣的問題('post.path'沒有轉義,不是嗎?在這種情況下我會如何正確地轉義它?現在它已知儘管安全。) – HoverHell 2011-02-28 18:17:20
只是一個問題。在你的數據中可能有'child.path LIKE(post.path ||'%')AND child.depth
2011-02-28 20:48:54