INSERT INTO `database_name`.`table_3` (
`value_id` ,
`entity_type_id` ,
`attribute_id` ,
`store_id` ,
`entity_id` ,
`value`
)
VALUES (
NULL , '4', '85', '0',
SELECT entity_id FROM table_3 WHERE table_3.value = 'someTextThatIKnow',
SELECT value FROM table_1 WHERE entity_id = SELECT entity_id FROM table_3 WHERE table_3.value = 'someTextThatIKnow'
);
这就是我的代码。因此,在table_3
中,我有一个插入的行,其中包含entity_id
和value
列的值。现在,在同一个表中,我想在以下相同的列中插入:
entity_id
- >与已插入的行相同的值value
- > table_1
中的行(也包含* entity_id *和值列)中的值,entity_id
下的值与table_3
中的行相同。 我希望你能理解我的想法。
现在,我收到错误#1064
(语法错误)。我似乎找到任何语法错误。我还尝试用' '
包围表名。如何构建此查询?
答案 0 :(得分:2)
忽略值位,并将所有数据放入select:
INSERT INTO `database_name`.`table_3` (
`value_id` ,
`entity_type_id` ,
`attribute_id` ,
`store_id` ,
`entity_id` ,
`value`
)
SELECT NULL, 4, 85, 0, table_3.entity_id, table_1.value
FROM table_3
INNER JOIN table_1 ON table_3.entity_id = table_1.entity_id
WHERE table_3.value = 'someTextThatIKnow';
见the documentation。请注意,这可能一次插入多行。
根据评论的后续跟进:
为了在table_3中添加三个条目,使用三个不同的entity_type_id值,但只有一个匹配的现有行,可以使用三个不同的硬编码值调用上述三次插入语句。
或者,您可以在一个批次中执行此操作:
INSERT INTO `database_name`.`table_3` (
`value_id` ,
`entity_type_id` ,
`attribute_id` ,
`store_id` ,
`entity_id` ,
`value`
)
SELECT NULL, 4, entid_values.entity_type_id, 0, table_3.entity_id, table_1.value
FROM table_3
INNER JOIN table_1 ON table_3.entity_id = table_1.entity_id
CROSS JOIN
(
SELECT 85 AS entity_type_id
UNION
SELECT 86 AS entity_type_id
UNION
SELECT 87 AS entity_type_id
) AS entid_values
WHERE table_3.value = 'someTextThatIKnow';
还可以通过针对临时表创建,填充和交叉连接来实现此目的,而不是使用嵌套查询。如果您使用许多不同的硬编码值,或者想要为多个不同的列应用多个静态值,那么临时表方法会使insert语句更容易阅读。
更容易阅读和更好的执行方式,因为它们是整数值,将在您的数据库中保留a tally or numbers table并加入其中。
答案 1 :(得分:1)
将所有值插入到select语句中:
INSERT INTO `database_name`.`table_3` (
`value_id` ,
`entity_type_id` ,
`attribute_id` ,
`store_id` ,
`entity_id` ,
`value`)
SELECT NULL , '4', '85', '0', t3.entity_id, t1.value
FROM table_3 t3
INNER JOIN table_1 t1 ON t3.entity_id = t1.entity_id
WHERE t3.value = 'someTextThatIKnow';