0
查詢,如:爲什麼使用CASE WHEN而不是編程語言控制語句?
query = "SELECT user_id FROM users WHERE lang = %s ORDER BY CASE WHEN %s <> NULL THEN location <-> %s ELSE RANDOM() END LIMIT 1"
query(query, lang, location, location)
可以寫成(使用python):
location = ...
order = "RANDOM()" if location is None else "location <-> %s"
order_args = [] if location is None else [location]
query = "SELECT user_id FROM users WHERE lang = %s ORDER BY "+order+" LIMIT 1"
query(query, lang, *order_args)
爲什麼要在這種情況下使用的 「CASE」 SQL,當它可能做這樣的事情,從sql注入安全並保持查詢非常乾淨? 有沒有一些親和控制?
如果查詢中有更多的CASE,它可能是一個更清潔的解決方案。
執行'order by'命令可以快得多。特別是,此查詢的原始版本只返回1行。沒有在數據庫和應用程序之間進行額外的數據移動有很大的節約。 –
@GordonLinoff對不起,我現在編輯我的消息修復一些錯誤。是的,我限制了我的查詢1行(所以我現在也添加了它),但我的問題是更一般的:爲什麼我應該使用sql「case」編寫一個非常長的sql字符串時,我可以使用python字符串格式添加「件」字符串?最終結果應該是相同的查詢並且更具可讀性 – 91DarioDev
檢查https://dba.stackexchange.com/questions/160237/does-it-make-sense-to-have-case-end-in-an-order-通過 – joanolo