SQL WHERE IN參數化編譯寫法簡單示例_數據庫其它

來源:腳本之家  責任編輯:小易  

where 后面是一個條件式,表示要找出滿足這個條件的結果in 里面是個子查詢或者給定的值比如 select*from student where Sname='張三';查詢姓名叫張三的學生的信息*/select*from student where Sname in('張三','李四');查詢張三和李四的學生的信息*/select*from student where Sname in(select Sname from sn where Sno='001');查詢學號是001的學生信息*/不知道能不能看懂,怪亂的www.13333515.buzz防采集請勿采集本網。

前言

最近在一次使用sql中的where in語句時,造成了一些非預期的查詢結果。尤其是在代碼中去編寫并執行sql語句時,會出現一些意外情況。再查閱了一些資料以及手動測試后,發現是自己sql語句寫法存在問題,在此記錄。

你的語句有問題應該這樣 select id,name from test where id in('1001','1005','1003');如果你想按順序的話 這樣就可以 select id,name from test where id='1001' union all select id,name

例子

業務需求,需要通過SQL語句從asset資產表中查詢域名字段在(“thief.one”,”nmask.cn”,”sec.thief.one”)范圍內的數據庫記錄,SQL語句該怎么寫呢?

中文也是字符串,條件寫對是沒有問題的

拼接法(錯誤)

我勒個去… SELECT*FROM A WHERE A.A IN(SELECT*FROM B) IN只能查一個數據在另一個數據集里的結果,不能查一個數據集在另一個數據集中的結果。

select*from aa where id in(select*from bb) 可以這樣寫的,后面的*號改成需要的字段名

values = "'thief.one','nmask.cn','sec.thief.one'"sql = "select * from asset where domain in ("+values+")"print sql

這樣肯定不行 你的參數必須是一個集合,如 or inv_type in('A','a') 當你的參數為@inv_type='N','A'時,你可以這樣用動態SQL來解決 v_sql varchar2(400);v_sql:='select*from tab where 條件1 or

說明:通過將搜索條件以字符串拼接的方式構造sql語句,語法上可通過,但存在著安全隱患(參照sql注入漏洞)

參數化1(錯誤)

values = (("thief.one","nmask.cn","sec.thief.one"),)sql = "select * from asset where domain in %s"print sqlprint values

說明:通過參數化方式,將where in 后面的查詢內容傳入。表面上看沒問題,但在編譯過程中,會將(“thief.one”,”nmask.cn”,”sec.thief.one”)整體看成一個字符串,而作為查詢條件,與需求不符合。

參數化2(正確)

values = ("thief.one","nmask.cn","sec.thief.one")sql = "select * from asset where domain in ({})".format(",".join(['%s' for i in values]))print sqlprint values

說明:通過計算values里面字符串個數,動態構造編譯的參數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對真格學網的支持。

方法二肯定不行,@id是字符串不是集合方法一中要這樣寫:[email protected]='update ffzs_unit set unitname='''+name+''' where uid in('+id+')'對于SQL中,字符串要有單引號你不要execute(@SelectText)先改成 [email protected]看看輸出的字符串到底是什么,然后在查詢分析器中測試一下語法,再改原有的內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • mysql的where語句中between與in的使用教程
  • mysql 存儲過程傳參數實現where id in(1,2,3,...)示例
  • 解析sql語句中left_join、inner_join中的on與where的區別
  • 程序員應該知道的數據庫設計的兩個誤區
  • mssql內連接inner join查詢方法
  • 數據庫 三范式最簡單最易記的解釋
  • 復雜系統中的用戶權限數據庫設計解決方案
  • maven nexus 安裝nexus私服出現的問題和解決辦法
  • sql小計匯總 rollup用法實例分析
  • sql四舍五入、向下取整、向上取整函數介紹
  • sql數據庫與oracle數據庫鏡像有什么不同對比
  • 推薦sql server一些常見性能問題的解決方法
  • 數據庫語言分類ddl、dcl、dml詳解
  • SQL 存儲過程 where in 的問題 帶參數的!!
  • sql中,In和where的區別是啥
  • sql 中where條件用了in可是()中的具體參數個數不知道。怎么解決呀?
  • SQL where in條件的問題
  • SQL where in 語句順序問題
  • sql 如何寫包含多個值的條件? 重點:值是中文!用where in('一','二')這樣查出的結果不對!
  • 關于 sql 語句 where in 的問題
  • sql select where in的優化要怎樣做?
  • 關于SQL的Where子句中的In的問題。(急)
  • sql語句的書寫 where in
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁數據庫其它mysql的where語句中between與in的使用教程mysql 存儲過程傳參數實現where id in(1,2,3,...)示例解析sql語句中left_join、inner_join中的on與where的區別程序員應該知道的數據庫設計的兩個誤區mssql內連接inner join查詢方法數據庫 三范式最簡單最易記的解釋復雜系統中的用戶權限數據庫設計解決方案maven nexus 安裝nexus私服出現的問題和解決辦法sql小計匯總 rollup用法實例分析sql四舍五入、向下取整、向上取整函數介紹sql數據庫與oracle數據庫鏡像有什么不同對比推薦sql server一些常見性能問題的解決方法數據庫語言分類ddl、dcl、dml詳解sql join on 用法mysql mysqldump命令使用詳解sqlserver、mysql、oracle三種數sql中代替like語句的另一種寫法如何讓sql運行得更快關于adox的相關知識如何取得一個表的所有字段名用逗sql server下數據庫鏈接的使用方sql server 2005的表分區sql 查詢語句積累深入解析nosql數據庫的分布式算法(圖文詳sql server的字段類型說明jdbc 數據庫常用連接 鏈接字符串maven nexus 安裝nexus私服出現的問題和解為什么你不要收縮數據庫文件(國外翻譯)數據庫為何要建立索引的原因說明sql中where子句與having子句的區別小結數據庫測試 實用技巧及測試方法redis數據庫查找key在內存中的位置的方法比較sql server與oracle、db2數據庫的一些
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果