Oracle SQL 工会
Oracle SQL Unions
我正在尝试编写一个从很多表中提取数据的查询,并且有大约 20 个联合。它基本上是重复提取相同的信息,但每次都有更多的层,以显示一种树
我不会解释为什么要这样做,但我想比较最后两列。我正在使用一个案例来执行此操作,如果我向此查询添加一个案例,则会收到错误“查询块的结果列数不正确。这似乎是因为联合中的最终 select 有一个额外的列(比较案例)。
有什么办法可以解决这个问题吗?我不想将大小写添加到每个 select,因为这会添加大约 15 个我不想要的列。
希望这是有道理的。
谢谢
使用子查询:
SELECT col1,
col2,
CASE
WHEN col1 = 'somevalue'
THEN 'someresult'
ELSE 'otherresult'
END AS col3
FROM (
SELECT col1, col2 FROM table1 UNION ALL
SELECT col1, col2 FROM table2 UNION ALL
SELECT col1, col2 FROM table3
-- ...
);
或者使用子查询分解子句:
WITH data ( col1, col2 ) AS (
SELECT col1, col2 FROM table1 UNION ALL
SELECT col1, col2 FROM table2 UNION ALL
SELECT col1, col2 FROM table3
-- ...
)
SELECT col1,
col2,
CASE
WHEN col1 = 'somevalue'
THEN 'someresult'
ELSE 'otherresult'
END AS col3
FROM data;
我正在尝试编写一个从很多表中提取数据的查询,并且有大约 20 个联合。它基本上是重复提取相同的信息,但每次都有更多的层,以显示一种树
我不会解释为什么要这样做,但我想比较最后两列。我正在使用一个案例来执行此操作,如果我向此查询添加一个案例,则会收到错误“查询块的结果列数不正确。这似乎是因为联合中的最终 select 有一个额外的列(比较案例)。
有什么办法可以解决这个问题吗?我不想将大小写添加到每个 select,因为这会添加大约 15 个我不想要的列。
希望这是有道理的。
谢谢
使用子查询:
SELECT col1,
col2,
CASE
WHEN col1 = 'somevalue'
THEN 'someresult'
ELSE 'otherresult'
END AS col3
FROM (
SELECT col1, col2 FROM table1 UNION ALL
SELECT col1, col2 FROM table2 UNION ALL
SELECT col1, col2 FROM table3
-- ...
);
或者使用子查询分解子句:
WITH data ( col1, col2 ) AS (
SELECT col1, col2 FROM table1 UNION ALL
SELECT col1, col2 FROM table2 UNION ALL
SELECT col1, col2 FROM table3
-- ...
)
SELECT col1,
col2,
CASE
WHEN col1 = 'somevalue'
THEN 'someresult'
ELSE 'otherresult'
END AS col3
FROM data;