【问题标题】:Insert multi column result into single column table将多列结果插入单列表
【发布时间】:2012-09-11 15:22:33
【问题描述】:

我有一个包含三列的“电影”表:“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

【问题讨论】:

  • 我很想知道:您为什么需要这样做?
  • 我正在构建一个需要取消引用许多电影并使用该数据的工具。有几个查询需要访问这个 id_collection(当然在这个例子中被简化了),所以我想把它收集到一个单独的表中,而不是每个模块都自己创建这个集合。我想看看是否有一种优雅的方法可以一次性完成,而不是使用 PHP-Backend。还有:)

标签: mysql sql split


【解决方案1】:

应该是这样的

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

【讨论】:

    【解决方案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

    【讨论】:

    • 联合所有...天哪,我不记得了。谢谢,这正是我所需要的,以优雅的方式解决。 :)
    • @EmilioJ 乐于提供帮助。虽然我不完全知道您需要一列中的数据来做什么,但如果需要,我会建议您在第二个查询中使用指示器,然后您可以知道数据来自哪一列。 :)
    • 不,在我的特定情况下不需要指标。我只需要一个符合特定条件的 ID 集合,然后我可以进一步处理数据。不过,该指标可能对其他人有用,因此您的答案是首选 ;-)
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 2021-11-07
    • 1970-01-01
    • 2017-01-05
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    相关资源
    最近更新 更多