Mysql根据EXISTS从一张表中插入列和数据

标签 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(table) 最终应该看起来像这样 -

Event_tags
event_id    tag_id
3           1
4           2
1           1
2           2

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

*编辑如下

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

最佳答案

你能试试这个吗?

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
);

基于事件表中的信息列的第二个答案

    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 
    INNER JOIN events AS E1
    E1.event_id=ET.event_id
    WHERE E1.info = 'HybridAnalysis'
    );

关于Mysql根据EXISTS从一张表中插入列和数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37495703/

相关文章:

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - 实现动态更新upvote/downvote

c# - MYSQL Huge记录并找到每个最近的点

php - 如何选择数据库的所有表mySql并按数据显示查询顺序,表具有相同的结构

python - 使用 PyMySQL 建立与服务器的连接时遇到问题 [WinError 10054]

java - 有什么方法可以仅在第一次执行时使用预设值完全填充表格?

java - 无法连接到 tomcat 上的 MySQL,但它使用 hibernate 作为独立的 java 类连接

mysql - SQL 加入和排除/过滤

mysql - 无法使用 Sequelize 将 id 插入属于外键引用表的表中

php - 纬度和经度值保存为字符串还是数字?