使用SELECT语句作为要插入的值

时间:2014-02-10 15:08:44

标签: mysql sql

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_idvalue列的值。现在,在同一个表中,我想在以下相同的列中插入:

  1. in entity_id - >与已插入的行相同的值
  2. in value - > table_1中的行(也包含* entity_id *和列)中的值,entity_id下的值与table_3中的行相同。
  3. 我希望你能理解我的想法。

    现在,我收到错误#1064(语法错误)。我似乎找到任何语法错误。我还尝试用' '包围表名。如何构建此查询?

2 个答案:

答案 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';