Re: [SQL ] Insert or Replace 如何分別給值?
※ 引述《liu2007 (薯)》之銘言:
: 資料庫名稱:SQLITE
: 資料庫版本:SQLITE 3
: 內容/問題描述:
: 我有一個表如下
: CREATE TABLE myTable(
: id TEXT NOT NULL UNIQUE,
: name TEXT ,
: descript TEXT ,
: confirmed NOT NULL);
: 我想要做的事情是每當有一筆新的資料進來的時候
: 如果資料表裡面沒有id 這筆資料的話就新增(insert)
: 如果有的話,又假如name 和 descript 的原始內容與此筆薪資料的內容相同,
: 則 confirmed = 'yes', 反之 confirmed = 'no'
: 下面是我的語法
: INSERT OR replace INTO test (id, name, descript, confirmed)
: VALUES ('001', 'aaa', CASE WHEN name = 'aaa' AND descript = 'bbb'
: THEN 'YES' ELSE 'no' END
: );
: 本來以為可以像在select上使用case when ,但卻報錯
: 訊息卻是Result: no such column: name
直覺想法是「居然是抱怨找不到欄位而不是噴 syntax error」
回頭一想,其實沒真的搞懂過 sqlite(以及其他資料庫們)怎麼解算欄位名稱
: 即使是加上myTable.name仍然報相同的錯誤訊息
可以預期不會成功,因為這個 row 還沒 insert 進 myTable
所以 myTable.name 應該不會解到想要的欄位
: 請問該怎麼改呢?
: 感謝閱讀
倒是有想到幾個解法
首先是可以原樣倒進暫存表,然後 INSERT .. INTO .. SELECT
事後再把暫存表 DROP 掉
```
sqlite> CREATE TABLE tmp (id TEXT NOT NULL UNIQUE, name TEXT, descript TEXT);
sqlite> INSERT INTO tmp (id, name, descript)
...> VALUES ('A01', 'aaa', 'bbb'), ('A02', 'yyy', 'zzz');
sqlite> SELECT * FROM tmp;
A01|aaa|bbb
A02|yyy|zzz
sqlite> INSERT INTO myTable (id, name, descript, confirmed)
...> SELECT id, name, descript, CASE WHEN name='aaa' THEN 'YES' ELSE 'NO' END
...> FROM tmp;
sqlite> SELECT * FROM myTable;
A01|aaa|bbb|YES
A02|yyy|zzz|NO
sqlite> DROP TABLE tmp;
```
如果 INSERT 是你用其他 script 產生的
也可以直接把 name 換成欄位內容
```
sqlite> INSERT INTO myTable (id, name, descript, confirmed) VALUES
...> ('A03', 'aaa', 'xxx', CASE WHEN 'aaa'='aaa' THEN 'YES' ELSE 'NO' END),
...> ('A04', 'bbb', 'xxx', CASE WHEN 'bbb'='aaa' THEN 'YES' ELSE 'NO' END);
sqlite> SELECT * FROM myTable;
A01|aaa|bbb|YES
A02|yyy|zzz|NO
A03|aaa|xxx|YES
A04|bbb|xxx|NO
```
不過如果用到其他語言讀 csv 檔
直接在其他語言裡面把欄位做對,不在 SQL 處理搞不好更快
----
其實還想到 DECLARE 變數然後一直 SET 這種爛招
不過完全不實際...
--
莉~娜~在~我~們~之~間~有~名~嗎~?
打倒了魔王大人,被那位大人附體之後平安無事地打倒了冥王大人
擊退了霸王大人,然後又打倒了魔王大人。
這種傢伙還不有名?魔族有那麼粗神經嗎?有那麼沒危機意識嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.166.99.151 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1666669434.A.2D7.html
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章