如何INSERT SELECT ...哪里没有EXISTS SELECT?

时间:2013-10-25 13:48:10

标签: mysql expressionengine

我在表exp_weblog_titles中有一系列的博客条目。它按表exp_categories c中的类别分类,并由表exp_category_posts cp连接。

类别中存在父子关系。目前,我想把目前归类为4810类子项的所有条目都归类,并将这些条目本身归类为4810类。

这是我为此操作提出的(未经测试的)查询:

INSERT INTO exp_category_posts (entry_id,cat_id)
(select distinct(t.entry_id), '4810' 
from
    exp_weblog_titles t
        left join
    exp_category_posts cp ON t.entry_id = cp.entry_id
        left join
    exp_categories c ON c.cat_id = cp.cat_id
where
    t.weblog_id = 5 and c.parent_id = 4810)

但我想避免在category_posts cp中插入新的连接记录,其中可能存在相同的连接记录。

我无法理解那些不存在的东西。它是否应该是插入操作的一部分,subselect?无论如何都无法想象。

这将是:

IF NOT EXISTS 
SELECT * FROM exp_category_posts 
where cat_id = 4810 and entry_id = $thecurrentrow

但我是否要参考当前行?

这是在ExpressionEngine 1中。

Mats的答案引起的

更新:(entry_id,cat_id)上没有唯一键。不确定添加一个的后果。

1 个答案:

答案 0 :(得分:1)

假设(entry_id, cat_id)exp_category_posts中的唯一键,您应该可以使用INSERT IGNOREINSERT IGNORE将跳过在插入时会产生重复键错误的记录。

您可以在参考手册http://dev.mysql.com/doc/refman/5.5/en/insert.html中找到更多信息。

相关问题