我有一个包含三列的“电影”表:“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_id 看起来像
id_1
master_1
id_2
master_2
id_3
所以我想将结果中的每一列转换成它自己的行。我怎样才能优雅地做到这一点? 我知道我可以在多个查询中做到这一点,分别搜索 id 和 master_id,而且我知道我可以用 PHP 左右解决这个问题。但如果可能的话,我更希望它能在单个 mysql 查询中解决该问题。
我为此做了一个 sqlfiddle: http://sqlfiddle.com/#!2/b4a7f/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
关于mysql - 将多列结果插入单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12492656/