首页 > 解决方案 > MySQL - INSERT INTO SELECT 使用列名和值的子查询

问题描述

在我公开的示例中,这是一个可以通过许多其他方式简单解决的问题,但在实际情况中,我的子查询更复杂,但解决我自己问题的原理是相同的。很可能是语法问题,所以我将问题简化为最简单的形式。

假设我有以下表格:

/* contents_table */
  id │ field1   field3
 ════╪════════════════════ 
  1  │ os       devices_os


/* os_table */
  id │ devices_os  
 ════╪════════════ 
  1  │ android     
  2  │ ios         


/* my_table */
  id │ os       
 ════╪═════════ 
     │ 

contentsTable.field1保存我需要设置的列的名称MyTablecontentsTable.field2保存os_table我需要取值的列的名称。如果我以传统方式执行此操作,这不是问题,因为:

INSERT INTO my_table (os)
SELECT 'devices_os'
FROM os_table

my_table将根据我的需要填写:

/* my_table */
  id │ os       
 ════╪═════════ 
  1  │ android  
  2  | ios

我需要做的是完成同样的结果,但使用子查询。使用同样的例子,这里有一些错误的尝试:

INSERT INTO my_table (SELECT field1 FROM contents_table)
SELECT (SELECT field2 FROM contents_table)
FROM os_table;


INSERT my_table (SELECT field1 FROM contents_table)
VALUES (SELECT field2 FROM contents_table)
FROM os_table;


INSERT INTO my_table SELECT CONCAT('(', '(SELECT field1 FROM contents_table)', ')')
SELECT (    SELECT CONCAT('`', '(SELECT field2 FROM contents_table)', '`')    )
FROM os_table;

似乎有可能,但我无法弄清楚。请赐教!

标签: mysqlsqlselectsubquery

解决方案


推荐阅读