【问题标题】:How to combine two columns one below the other in SQLite?如何在 SQLite 中将两列组合在一起?
【发布时间】:2020-05-29 10:33:38
【问题描述】:

我在 SQLite 中有一个查询,以获取火车路线中的所有车站,最后让我有两个名为 ORI_STATION_ID 和 ORIG_STATION_ID 的列,如图所示:

这是我当前的查询(ORDER_COL 未显示在结果表中,仅用于排序):

SELECT table_3.ORI_STATION_ID, table_3.DEST_STATION_ID
    FROM table_1
    INNER JOIN table_2
    ON table_2.ID = table_1.ID
    INNER JOIN table_3
    ON table_3.ID = table_2.ID
    WHERE table_1.CODE = "DINO"
    ORDER BY ORDER_COL ASC

我想获取火车路线中的所有站,从第一个到最后一个。这里,第一个是 ID 为 1 的,最后一个是 ID 19。

我可以走第一列,准备出发,但我会错过最后一站。如果我走第二列,我会错过第一站。

我想做的事:将两列合二为一,将一列放在另一列之下并删除重复的电台,所以我的 ALL_STATIONS_COLUMN 看起来像:

| ALL_STATIONS_COLUMN |
-----------------------
|          1          |
|          2          |
|          9          |
|         10          |
|         11          |
|         19          |

我在其他帖子中看到了如何使用连接来组合表或 CONCAT(但似乎不适合 SQLite)但没有找到正确的方法。

【问题讨论】:

    标签: sql sqlite


    【解决方案1】:

    联合查询是这里的一种选择:

    SELECT t3.ORI_STATION_ID AS ALL_STATIONS_COLUMN
    FROM table_1 t1
    INNER JOIN table_2 t2 ON t2.ID = t1.ID
    INNER JOIN table_3 t3 ON t3.ID = t2.ID
    WHERE t1.CODE = 'DINO'
    UNION
    SELECT t3.DEST_STATION_ID
    FROM table_1 t1
    INNER JOIN table_2 t2 ON t2.ID = t1.ID
    INNER JOIN table_3 t3 ON t3.ID = t2.ID
    WHERE t1.CODE = 'DINO'
    ORDER BY ALL_STATIONS_COLUMN;
    

    这会同时杀死两只鸟 (splat),因为联合将起点站 ID 和目标站 ID 汇集在一起​​,同时如果重复值出现在两组之间,也会删除它们。

    【讨论】:

    • Ups,对不起,这不是故意的。 CODE 属于table_1。我编辑了查询。
    【解决方案2】:

    听起来像是递归 CTE 的情况(示例仅使用您的最终路由表;我不会尝试提供三个数据表;使用计算该路由的查询轻松扩展以下内容另一个 CTE):

    WITH cte AS
     (SELECT 1 AS all_stations_column, 1 AS stop
      UNION
      SELECT r.dest_station_id, cte.stop + 1
      FROM route AS r
      JOIN cte ON r.ori_station_id = cte.all_stations_column)
    SELECT all_stations_column FROM cte ORDER BY stop;
    

    给予

    all_stations_column
    -------------------
    1
    2
    9
    10
    11
    19
    

    dbfiddle example

    【讨论】:

    • 有趣,我以前没有听说过 CTE。抱歉,我很难将之前的查询整合到您的 CTE 中。我想我应该用它替换route。你能指点我怎么做吗?
    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多