mysql - 将多列结果插入单列表

标签 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_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/

相关文章:

mysql - 如何在 MySQL 中使用自定义逻辑 IF 语句比较两列之间的值

sql - 将 Xml 转换为表 SQL Server

windows - 通过 Putty 的 Emacs

mysql - @variable := variable2 mean in a MySQL query? 是什么

javascript - 窗口内弹出

javascript - 参数化/准备语句使用 pg-promise

c++ - 多次拆分链表导致堆栈溢出 C++

python - 在指定行 Python 之后拆分 CSV 文件

php - 根据常见日期循环遍历 MySQL 数据

java - 从数据库读取时为 "Operation not allowed after ResultSet closed"