我有一个包含三个列的'电影'表:'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
答案 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
这样做,你无法区分每列的值,所以你总是可以添加一个指标,这会给你两列,但你知道数据的来源:
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