Sql 将唯一的属性集生成到新表中?

Sql 将唯一的属性集生成到新表中?,sql,plsql,Sql,Plsql,我目前需要创建一个表,其中包含另一个表的唯一属性集。也就是说,我有一张如下所示的桌子: 表A:列=列1、列2、列3、列4、列5 我需要制作这个: Table B : columns = columnName, value col 1, col1attribute1 col 1, col1attribute2 col 1, col1attribute3 col 2, col2attribute1 col 3, col3attribute1 col 3, col3attribute2 有没有一种简

我目前需要创建一个表,其中包含另一个表的唯一属性集。也就是说,我有一张如下所示的桌子:

表A:列=列1、列2、列3、列4、列5

我需要制作这个:

Table B : columns = columnName, value
col 1, col1attribute1
col 1, col1attribute2
col 1, col1attribute3
col 2, col2attribute1
col 3, col3attribute1
col 3, col3attribute2

有没有一种简单的方法可以单独使用(PL)SQL来实现这一点?如果我用Java编程的话,这看起来很简单,但是如果可能的话,我希望有一个纯sql的解决方案

CREATE TABLE TABLE_B (COLUMN_NAME, VALUE) AS
  SELECT DISTINCT 'COL_1', COL_1 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_2', COL_2 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_3', COL_3 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_4', COL_4 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_5', COL_5 FROM TABLE_A;
分享和享受。

另一种方法是使用:

  SELECT * INTO table_b from (
  SELECT DISTINCT 'COL_1', COL_1 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_2', COL_2 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_3', COL_3 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_4', COL_4 FROM TABLE_A
  UNION ALL
  SELECT DISTINCT 'COL_5', COL_5 FROM TABLE_A)a;

编辑:正如有人指出的,这在postgres中有效(我认为sql server也是如此),从您的PL/sql标记来看,我假设postgres as postgres是PL/pgSQL,直到现在才注意到这一点。

您提到(PL)sql,这是在Oracle上吗?这不起作用,至少在Oracle中是这样,从PLSQL标记来看,我猜这是Oracle的问题。为了让它在Oracle中工作,您需要将“SELECT*INTO table_b from”替换为“INSERT INTO table_b(列名称、值)”——在这种情况下,列列表实际上可以省去。没有向下投票,只是好奇什么数据库可能允许“SELECT*INTO…”语法。。。嗯。。。