我一直在迷失我的心灵。我有三个表,我必须加入,但我只需要插入数据库,如果三列没有现有的值。我已尝试ON DUPLICATE KEY UPDATE
,WHERE 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_folder
是baseimage.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
有人可以告诉我在这里做错了什么吗?
答案 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"