如果存在行则更新,否则使用另一个表中的数据插入新记录

时间:2015-11-06 17:51:49

标签: mysql

我确信以前曾经问过这个问题,但是我无法完全理解我正在尝试搜索的内容。我认为这是因为我想从第二个表和非关键字段进行。

基本上我有这个courses.keywords表,其中包含不同课程的关键字。

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| course_id | int(11)      | NO   | MUL | NULL    |                |
| keyword   | varchar(100) | NO   | MUL | NULL    |                |
| excerpt   | longtext     | NO   |     | NULL    |                |
| explained | longtext     | NO   |     | NULL    |                |
| slug      | varchar(100) | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

我从一个旧的wordpress网站中摘录了一个包含许多理论笔记的摘录,这些笔记的标题与上表中的某些关键字相匹配。

+------------------+----------------+------+-----+---------+-------+
| Field            | Type           | Null | Key | Default | Extra |
+------------------+----------------+------+-----+---------+-------+
| wp_ID            | int(4)         | YES  |     | NULL    |       |
| wp_post_date     | varchar(19)    | YES  |     | NULL    |       |
| wp_post_modified | varchar(19)    | YES  |     | NULL    |       |
| wp_post_status   | varchar(7)     | YES  |     | NULL    |       |
| wp_post_title    | varchar(35)    | YES  |     | NULL    |       |
| wp_post_content  | varchar(10435) | YES  |     | NULL    |       |
| wp_post_excerpt  | varchar(224)   | YES  |     | NULL    |       |
| wp_post_parent   | int(1)         | YES  |     | NULL    |       |
| wp_post_name     | varchar(33)    | YES  |     | NULL    |       |
| wp_post_type     | varchar(8)     | YES  |     | NULL    |       |
+------------------+----------------+------+-----+---------+-------+

如果找到关键字,我想用旧的wordpress数据更新摘录和解释字段,给它一个课程ID为2.如果关键字不存在,我想插入一个新行并给它一个course_id 4。

我从这个from here开始,但还不能完成它。

    IF NOT EXISTS (SELECT * FROM `curriculum.keywords` WHERE `keyword` = STUCK HERE) THEN

    INSERT INTO `curriculum.keywords` (`keyword`, `excerpt`, `explained`, `slug`, `course_id`) 
    SELECT `wp_post_title`, `wp_post_excerpt`, `wp_post_content`, `wp_post_name`, 4 FROM `aimport-notes`

    ELSE

    UPDATE `curriculum.keywords` (`keyword`, `excerpt`, `explained`, `slug`, `course_id`) 
    SELECT `wp_post_title`, `wp_post_excerpt`, `wp_post_content`, `wp_post_name`, 4 FROM `aimport-notes` 
   WHERE `curriculum.keywords`.`keyword` = `aimport-notes`.`wp_post_title`

    END IF; 

感谢您的帮助。

克里斯

2 个答案:

答案 0 :(得分:0)

IF NOT EXISTS (
    SELECT 1 FROM `curriculum.keywords` kw
    INNER JOIN `wordpress` wp
    ON wp.wp_post_title LIKE CONCAT( '%', kw.keyword, '%')
)
...

答案 1 :(得分:0)

使用新关键字插入数据的查询:

INSERT INTO `curriculum.keywords` (`keyword`, `excerpt`, `explained`, `slug`, `course_id`) 
SELECT notes.`wp_post_title`, notes.`wp_post_excerpt`, notes.`wp_post_content`, notes.`wp_post_name`, 4 
FROM `aimport-notes` notes left join `curriculum.keywords` keywords on
notes.keyword=keywords.wp_post_title where keywords.keyword is null;

查询以更新匹配的关键字记录:

update `curriculum.keywords` keywords
inner join `aimport-notes` notes on notes.keyword=keywords.wp_post_title
set keywords.keyword=notes.wp_post_title,
    keywords.excerpt=notes.wp_post_excerpt,
    keywords.explained=notes.wp_post_content,
    keywords.slug=notes.wp_post_name,
    keywords.course_id=4;