【问题标题】:sqlite upsert query syntax?sqlite upsert 查询语法?
【发布时间】:2021-09-22 07:02:05
【问题描述】:

表寄存器

key app
123 insta

表格收件箱

EventSourceApplication EventName MessageId(primarykey) MessageText status
facebook appointmentbooked CAR20124 SUCCESSFULL ok

仅当表寄存器中有特定数据时,我才想将其插入到表收件箱中,在这种情况下 key = 123 & app = insta

我的查询是这样的

INSERT INTO inbox(EventSourceApplication,EventName,MessageId ,MessageText,status)
VALUES ('fb1','appointmentbooked','CAR201246','SUCCESSFULL','nope') ON CONFLICT(MessageId) 
DO UPDATE SET EventSourceApplication = EXCLUDED.EventSourceApplication,
EventName = EXCLUDED.EventName,MessageText=EXCLUDED.MessageText
WHERE (SELECT 1 FROM register WHERE key='123' AND app = 'insta') 

查询错了吗?因为即使给出了错误的数据,我也可以插入收件箱

【问题讨论】:

  • 这能回答你的问题吗? sqlite insert into table select * from
  • 我没有在表之间移动数据,我只是检查表寄存器中是否存在数据,然后只在两个表中的列相互依赖的情况下插入表插入

标签: sql database sqlite


【解决方案1】:

您需要的WHERE 子句仅在SELECT 语句中有效,因此请不要使用VALUES,而是使用SELECT 并正确使用EXISTS

INSERT INTO inbox(EventSourceApplication, EventName, MessageId, MessageText, status)
SELECT 'fb1', 'appointmentbooked', 'CAR201246', 'SUCCESSFULL', 'nope' 
WHERE EXISTS (SELECT 1 FROM register WHERE key='123' AND app = 'insta') 
ON CONFLICT(MessageId) DO UPDATE SET 
  EventSourceApplication = EXCLUDED.EventSourceApplication,
  EventName = EXCLUDED.EventName,
  MessageText=EXCLUDED.MessageText;

【讨论】:

  • 如果我想给怎么办?代替 ex 的实际值:- VALUES(?,?,?,?) 我可以在那里使用 select 吗?稍后再给出值
  • @jeena 是的,使用SELECT ?, ?, ?, ?, ? ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2021-06-06
相关资源
最近更新 更多