sqlite - 将部分复制的新记录插入到同一个表中
问题描述
我对 SQLite 相当陌生,并试图做一些看起来非常简单但不起作用的事情。
我想在表中插入一条OwnerID相同但数据略有不同的新记录,部分复制,所以插入记录数据;
2, 55, 新数据, DARLTY
原始记录数据在哪里;
1、55、原始数据、DARLTY
问题是我不断接近“OwnerID”:语法错误。我在想我需要在将原始记录值插入新记录之前以某种方式将它们放入变量中,但是如何?
这就是我所拥有的,显然有缺陷,TIA
INSERT INTO MyTable
NULL AS KeyID, OwnerID AS OwnerID, 'newdata' AS Field2, Field3 AS Field3
WHERE Field3 LIKE '%DARL%'
AND Field3 <> 'DARLINGTON'
;
解决方案
您缺少SELECT
andFROM
关键字。
所以你的查询应该/可以是:-
INSERT INTO mytable
SELECT null AS keyid,ownerid AS ownerid,field2 AS field2,field3 AS field3
FROM mytable WHERE field3 LIKE '%DARLTY%' AND field3 <> 'DARLINGTON';
虽然稍微简单一点:-
INSERT INTO mytable (ownerid,field2,field3)
SELECT ownerid,field2,field3
FROM mytable WHERE field3 LIKE '%DARLTY%' AND field3 <> 'DARLINGTON';
会做同样的事情。
例如以下(为方便起见,将 x 添加到表名中):-
DROP TABLE IF EXISTS mytablex ;
CREATE TABLE IF NOT EXISTS mytablex (keyid INTEGER PRIMARY KEY,ownerid INTEGER, field2 TEXT, field3 TEXT);
INSERT INTO mytablex VALUES(1,55,'newdata','DARLTY'); -- Original value
INSERT INTO mytablex (ownerid,field2,field3)
SELECT ownerid,field2,field3
FROM mytablex WHERE field3 LIKE '%DARLTY%' AND field3 <> 'DARLINGTON';
SELECT * FROM mytablex;
结果是 :-
但是,请注意,如果您随后运行插入,那么您将插入更多行,例如第二次使用以下内容:-
INSERT INTO mytablex (ownerid,field2,field3)
SELECT ownerid,field2,field3
FROM mytablex WHERE field3 LIKE '%DARLTY%' AND field3 <> 'DARLINGTON';
SELECT * FROM mytablex;
将导致:-
如果第三次运行,则:-
为了消除这种重复,您不妨考虑使用:-
INSERT INTO mytablex (ownerid,field2,field3) SELECT ownerid,field2,field3
FROM mytablex
WHERE field3 LIKE '%DARLTY%'
AND field3 <> 'DARLINGTON'
AND (
SELECT count() FROM mytablex WHERE field3 LIKE '%DARLTY%' AND field3 <> 'DARLINGTON'
) = 1;
推荐阅读
- php - 如果购买了特定产品,Woocommerce BCC 向多封电子邮件发送电子邮件通知
- android - 如何将我的 CameraManager 更新到最新版本?
- c# - 使用 BindingSource 时指定列数据类型
- php - cookie 不是由 setcookie 设置的,但有 0 个错误 (SSO)
- javascript - react-native 中的“找不到变量:点击”
- entity-framework - 在 RawSQLQuery 填充对象时关闭 PropertyChanged 事件
- python - 如何在 Python 中创建返回星期几的代码?
- jackson-databind - 如何在没有 ObjectNode 的情况下创建 ValueNode?
- ocaml - OCaml 编译类型错误,不是正确的预期函数类型
- python - Tkinter ttk:背景/前景色在我的电脑上不起作用