使所有表成为父 ID 的子项(在 1 列中)

Making all tables results a child(in 1 columns) for a Parent ID

我有 1 个有 5 列的 table,我需要根据原始 table 中的密钥 ID 创建另一个只有 2 列的 tabled,其中该列不为空。

每列中的数据始终相同。

示例:

    ID | Col1 | Col2 | Col3 | Col4 |
    1  |   A  |   B  |   -  |   -  |
    2  |   -  |   B  |   -  |   D  |
    3  |   A  |   -  |   C  |   D  |

需要新的输出 table:

    ID | Child |
    1  |   A   |
    1  |   B   |
    2  |   B   |
    2  |   D   |
    3  |   A   |
    3  |   C   |
    3  |   D   |

我似乎无法理解这个问题,虽然我觉得我缺少了一些非常简单的东西,而且我需要加入 table 本身,但它是推杆所有的结果都集中在一个单一的栏目中,这让我很困惑。如有任何帮助,我们将不胜感激,如有任何问题,请随时提出。

此外,请问我正在尝试执行的这个过程有名称吗?

"standard" SQL 方法将使用 union all:

select id, col1 as col from t where col1 is not null union all
select id, col2 from t where col2 is not null union all
select id, col3 from t where col3 is not null union all
select id, col4 from t where col4 is not null union all
select id, col5 from t where col5 is not null;

也就是说,这不是最有效的方法,因为它会扫描 table 五次(每列一次)。如果 "table" 真的是一个视图,这尤其糟糕。

有替代方法,但它们往往取决于数据库。