1. <i id="s6b2k"><small id="s6b2k"></small></i>
    <b id="s6b2k"><bdo id="s6b2k"></bdo></b>
  2. <wbr id="s6b2k"></wbr>

    SQLite 實現if not exist 類似功能的操作_SQLite

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

    需要實現:

    if not exists(select * from ErrorConfig where Type='RetryWaitSeconds')
    begin
      insert into ErrorConfig(Type,Value1)
      values('RetryWaitSeconds','3')
    end

    只能用:

    insert into ErrorConfig(Type,Value1)
    select 'RetryWaitSeconds','3'
    where not exists(select * from ErrorConfig where Type='RetryWaitSeconds')

    因為 SQLite 中不支持SP

    補充:sqlite3中NOT IN 不好用的問題

    在用sqlite3熟悉SQL的時候遇到了一個百思不得其解的問題,也沒有在google上找到答案。雖然最后用“迂回”的方式碰巧解決了這個問題,但暫時不清楚原理是什么,目前精力有限,所以暫時記錄下來,有待繼續研究。

    數據庫是這樣的:

    CREATE TABLE book (
     id integer primary key,
     title text,
     unique(title)
    );
    CREATE TABLE checkout_item (
     member_id integer,
     book_id integer,
     movie_id integer,
     unique(member_id, book_id, movie_id) on conflict replace,
     unique(book_id),
     unique(movie_id)
    );
    CREATE TABLE member (
     id integer primary key,
     name text,
     unique(name)
    );
    CREATE TABLE movie (
     id integer primary key,
     title text,
     unique(title)
    );

    該數據庫包含了4個表:book, movie, member, checkout_item。其中,checkout_item用于保存member對book和movie的借閱記錄,屬于關系表。

    問一:哪些member還沒有借閱記錄?

    SQL語句(SQL1)如下:

    SELECT * FROM member WHERE id NOT IN(SELECT member_id FROM checkout_item);

    得到了想要的結果。

    問二:哪些book沒有被借出?

    這看起來與上一個是類似的,于是我理所當然地運行了如下的SQL語句(SQL2):

    SELECT * FROM book WHERE id NOT IN(SELECT book_id FROM checkout_item);

    可是——運行結果沒有找到任何記錄! 我看不出SQL2與SQL1這兩條語句有什么差別,難道是book表的問題?于是把NOT去掉,運行了如下查詢語句:

    SELECT * FROM book WHERE id IN(SELECT book_id FROM checkout_item);

    正確返回了被借出的book,其數量小于book表里的總行數,也就是說確實是有book沒有借出的。

    接著google(此處省略沒有營養的字),沒找到解決方案。可是,為什么member可以,book就不可以呢?它們之前有什么不同?仔細觀察,發現checkout_item里的book_id和movie_id都加了一個unique,而member_id則沒有。也許是這個原因?不用id了,換title試試:

    SELECT * FROM book WHERE 
     title NOT IN( 
     SELECT title FROM book WHERE id IN(
     SELECT book_id FROM checkout_item));

    確實很迂回,但至少work了。。。

    問題原因:當NOT碰上NULL

    事實是,我自己的解決方案只不過是碰巧work,這個問題產生跟unique沒有關系。邱俊濤的解釋是,“SELECT book_id FROM checkout_item”的結果中含有null值,導致NOT也返回null。當一個member只借了movie而沒有借book時,產生的checkout_item中book_id就是空的。

    解決方案是,在選擇checkout_item里的book_id時,把值為null的book_id去掉:

    SELECT * FROM book WHERE id NOT IN(SELECT book_id FROM checkout_item WHERE book_id IS NOT NULL);

    總結

    我在解決這個問題的時候方向是不對的,應該像調試程序一樣,去檢查中間結果。比如,運行如下語句,結果會包含空行:

    SELECT book_id FROM checkout_item

    而運行下列語句,結果不會包含空行:

    SELECT member_id FROM checkout_item

    這才是SQL1與SQL2兩條語句執行過程中的差別。根據這個差別去google,更容易找到答案。當然了,沒有NULL概念也是我“百思不得其解”的原因。

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支持真格學網。如有錯誤或未考慮完全的地方,望不吝賜教。

    您可能感興趣的文章:mssql和sqlite中關于if not exists 的寫法SQLITE3 使用總結SQLite3中的日期時間函數使用小結

  3. 本文相關:
  4. sqlite3的綁定函數族使用與其注意事項詳解
  5. sqlite時間戳轉時間語句(時間轉時間戳)
  6. sqlite 入門教程二 sqlite的創建、修改、刪除表
  7. system.data.sqlite 數據庫詳細介紹
  8. 為sqlite3提供一個ansi到utf8的互轉函數
  9. 基于sqlite特殊字符轉義的實現方法
  10. 初識sqlite3數據庫
  11. sqlite 內存數據庫學習手冊
  12. sqlite教程(三):數據表和視圖簡介
  13. sql中使用escape定義轉義符詳解
  14. sqlite怎么判斷表里面是否有數據。not exists 百度知道
  15. sqlite 創建索引后查詢語句 百度知道
  16. 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁mssql和sqlite中關于if not exists 的寫法sqlite3 使用總結sqlite3中的日期時間函數使用小結sqlite3的綁定函數族使用與其注意事項詳解sqlite時間戳轉時間語句(時間轉時間戳)sqlite 入門教程二 sqlite的創建、修改、刪除表system.data.sqlite 數據庫詳細介紹為sqlite3提供一個ansi到utf8的互轉函數基于sqlite特殊字符轉義的實現方法初識sqlite3數據庫sqlite 內存數據庫學習手冊sqlite教程(三):數據表和視圖簡介sql中使用escape定義轉義符詳解sqlite中文亂碼問題原因分析及解sqlite3中的日期時間函數使用小結sqlite3 top的查詢及limit語法介linux sqlite3 基本命令sqlite 錯誤碼整理sqlite3中自增主鍵相關知識總結sqlite優化方法sqlite循環批量插入數據采用批處sqlite3 使用總結sqlite 常用函數 推薦sqlite速度評測代碼sqlite3 top的查詢及limit語法介紹sqlite教程(一):sqlite數據庫介紹sqlite數據庫管理系統-我所認識的數據庫引sqlite教程(十四):c語言編程實例代碼(sqlite中重置自動編號列的方法sqlite常用語句以及sqlite developer的使sqlite教程(四):內置函數保護你的sqlite數據庫(sqlite數據庫安全秘sqlite教程(八):命令行工具介紹
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.yu113.com All Rights Reserved
    战天txt全集下载