如果VALUES不存在则INSERT

时间:2011-07-28 19:12:28

标签: php mysql

我一直在迷失我的心灵。我有三个表,我必须加入,但我只需要插入数据库,如果三列没有现有的值。我已尝试ON DUPLICATE KEY UPDATEWHERE NOT EXISTS,最后尝试INSERT IGNORE最后一个是没有任何结果,其他人会插入,即使存在相同的值。

我正在尝试

insert into TABLE name: set_colors (school_art_id, baseimage_id, sub_folder, layer)

school_art_id来自“id”另一个名为school_art的表 baseimage_id是名为baseimage的表中的“id” sub_folderbaseimage.sub_folder中的文件夹名称 layer是baseimage.layer

的值

这是不起作用的查询

INSERT IGNORE INTO set_colors (school_art_id, baseimage_id, sub_folder, layer)
SELECT 'school_art.id', 'baseimage.id', 'baseimage.sub_folder', 'baseimage.layer' 
SET school_art_id='school_art.id', 
baseimage_id='baseimage.id', 
sub_folder='baseimage.sub_folder', 
layer=baseimage.layer

有人可以告诉我在这里做错了什么吗?

3 个答案:

答案 0 :(得分:2)

您的查询语法对于选择部分完全中断。你正在选择一系列常量字符串,然后出于某种原因闯入'SET'并做一些分配。这没有任何意义,因为你没有在select中设置一个值。

您的查询应该类似于

INSERT IGNORE INTO set_colors (school_art_id, baseimage_id, sub_folder, layer)
SELECT field1, field2, field3, field4
FROM some_other_table
WHERE ...

答案 1 :(得分:0)

 INSERT IGNORE 

应该是

 INSERT IGNORE INTO

SET无法在SELECT或INSERT INTO查询中使用

答案 2 :(得分:0)

我找到了解决方案,万一其他人遇到同样的问题(我把它放在一个类中,所以{$ value}只是在你调用类时传入。

INSERT IGNORE INTO set_colors (school_art_id, baseimage_id, sub_folder, layer)
SELECT school_art.id, baseimage.id, baseimage.sub_folder, baseimage.layer
FROM school_art 
JOIN baseimage ON baseimage.base_folder = school_art.series_code 
WHERE baseimage.image_type = 'B' AND school_art.id = '{$value}' ORDER BY school_art.id"