3

我有一个包含三列的“电影”表:“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 查询中解决该问题。

我为此做了一个 sqlfiddle: http ://sqlfiddle.com/#!2/b4a7f/2

4

2 回答 2

2

会是这样

INSERT INTO temp_ids(id)
SELECT id 
FROM
(
   SELECT id
   FROM FirstTable 
   UNION
   SELECT master AS id
   FROM SecondTable 
) t
于 2012-09-19T10:16:13.640 回答
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

于 2012-09-19T10:16:21.687 回答