将多列结果插入单列表

时间:2012-09-19 10:12:35

标签: mysql sql split

我有一个包含三个列的'电影'表:'id','master_id'和'searchMe'(简化)。我有另一个表'temp_ids',其中包含一列:'id'。这是一张临时表,但我认为不重要。

当我对我的桌子'电影'进行查询时,如

SELECT `id`, `master_id` FROM 'movies' WHERE searchMe = '1';

我得到了一个多列结果。现在我想将每个id和每个master_id插入'temp_ids'表中,但一次只能插入一个。所以,如果我的结果是

id_1 | master_1
id_2 | master_2
id_3 | NULL

我希望我的temp_ids看起来像

id_1
master_1
id_2
master_2
id_3

所以我想将结果中的每一列转换为自己的行。我怎么能以优雅的方式做到这一点? 我知道我可以在多个查询中执行它,分别搜索id和master_id,我知道我可以用PHP解决这个问题。但我希望它能在单个mysql查询中解决这个问题,如果可能的话。

我为此制作了一个方形小说: http://sqlfiddle.com/#!2/b4a7f/2

2 个答案:

答案 0 :(得分:2)

就像这样

INSERT INTO temp_ids(id)
SELECT id 
FROM
(
   SELECT id
   FROM FirstTable 
   UNION
   SELECT master AS id
   FROM SecondTable 
) t

答案 1 :(得分:2)

SELECT数据,您可以使用UNION ALL进行此操作:

SELECT  `id`
FROM movies
WHERE searchMe = 1
union all
SELECT `master_id`
FROM movies
WHERE searchMe = 1
  and master_id is not null

请参阅SQL Fiddle with Demo

这样做,你无法区分每列的值,所以你总是可以添加一个指标,这会给你两列,但你知道数据的来源:

SELECT  `id`, 'id' type
FROM movies
WHERE searchMe = 1
union all
SELECT `master_id`, 'master'
FROM movies
WHERE searchMe = 1
  and master_id is not null

然后,您只需使用此INSERT INTO temp

将此查询用于SELECT