如何选择使用表名进入选择?

时间:2014-07-17 22:19:27

标签: sql oracle11g oracle-sqldeveloper

我正在使用此命令从所有这些表中获取C_DIV列。

SELECT DISTINCT C_DIV FROM TBL_TASK UNION
SELECT DISTINCT C_DIV FROM TBL_DATAMART_SUMMARY UNION
SELECT DISTINCT C_DIV FROM MMS_DIVI

以及更多其他表格。

从这个输出中我只得到C_DIV列,包含我需要的所有信息。

我想知道是否有某种方法可以获得每个使用表的列,所以不是只得到C_DIV列,而是得到C_DIV和TABLE_FROM

为例

C010    TBL_TASK 
C017    TBL_TASK 
C020    TBL_TASK 
C025    TBL_DATAMART_SUMMARY 
C027    TBL_DATAMART_SUMMARY 
C028    TBL_DATAMART_SUMMARY 
C034    TBL_DATAMART_SUMMARY 
C035    TBL_TASK 
C037    TBL_TASK
C050    MMS_DIVI

2 个答案:

答案 0 :(得分:1)

是的,您可以将它添加到联合中:

SELECT DISTINCT C_DIV, 'TBL_TASK' as which FROM TBL_TASK UNION ALL
SELECT DISTINCT C_DIV, 'TBL_DATAMART_SUMMARY' FROM TBL_DATAMART_SUMMARY UNION ALL
SELECT DISTINCT C_DIV, 'MMS_DIVI' FROM MMS_DIVI;

请注意,我还将union更改为union all。不同的子查询之间不能有重复,因此没有理由承担删除重复项的开销。 Union all效率更高。

答案 1 :(得分:0)

只是表名?我会在每个联盟中对它进行硬编码:

SELECT DISTINCT C_DIV , 'TBL_Task' as tablename FROM TBL_TASK UNION
SELECT DISTINCT C_DIV , 'TBL_DATAMARTSUMMARY' FROM TBL_DATAMART_SUMMARY UNION
SELECT DISTINCT C_DIV , 'MMS_DIVI' FROM MMS_DIVI