Mysql基于EXISTS从一个表中插入列和数据

时间:2016-05-28 05:54:13

标签: mysql

不确定为什么这不起作用,尝试将列(从表中)和数据(不是从任何表)从一个表插入到另一个表中而不是已经存在。

INSERT INTO event_tags ( event_id, tag_id ) 
VALUES (SELECT  events.id, 2 FROM events WHERE events.info = 'HybridAnalysis') 
WHERE NOT EXISTS (SELECT events.id=event_tags.event_id AND event_tags.tag_id=2);

Events
id  Info
1           ThreatExpert
2           HybridAnalysis
3           ThreatExpert
4           HybridAnalysis 

Event_tags
event_ID    tag_id
3           1
4           2

(eventsID不是主要的)

Event_tags(表格)应该看起来像这样 -

Event_tags
event_id    tag_id
3           1
4           2
1           1
2           2

这是我的错误 - 错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在“SELECT events.id,3 FROM events WHERE events.info ='HybridAnalysis'附近使用正确的语法。”不在第2行

*编辑如下

#####有一个我没有意识到的标签表可能会让它变得更容易
tags
id    name
3     HybridAndlysis
4     ThreatExpert

2 个答案:

答案 0 :(得分:1)

你能试试吗?

self.scrollView.contentOffset = CGPointZero;
self.scrollView.contentInset = UIEdgeInsetsZero;

基于事件表

中的信息列的第二个答案
INSERT INTO event_tags ( event_id, tag_id ) 
SELECT  events.id, 2 
FROM events AS E
WHERE E.info = 'HybridAnalysis'
AND NOT EXISTS 
(SELECT 
  1 
FROM  event_tags AS ET 
WHERE E.id=ET.event_id AND ET.tag_id=2
);

答案 1 :(得分:1)

因此,您可以使用它接受ThreatExpert或HybridAnalysis,如果不存在,它将在Event_tags表中输入:

INSERT INTO event_tags ( event_id, tag_id ) 
SELECT  
events.id,
(case when E.Info = 'HybridAnalysis' then 1 when E.Info = 'ThreatExpert' then 2 else 0 end)
FROM events AS E
WHERE
NOT EXISTS 
(SELECT 
1 
FROM  event_tags AS ET 
WHERE E.id=ET.event_id
);

如果有一个新的info应该有另一个tag_id,CASE语句会在表中插入0。

您的案例陈述可以更新以处理新的info条目。理想情况下,tag_id可以存储在events表或链接表中的某个位置。