如何使用另一个表中映射的列名查询select表?

时间:2018-06-14 13:55:08

标签: sql oracle

所以,我有两个表:dataTabledataTableColNames

dataTable是这样的:

col1 | col2 | col3 | ... | col9
-----|------|------|-----|-----------
123  | abcd | text | ... | 02/02/2018
 ... | ...  | ...  | ... | ...
999  | xyz  | text | ... | 31/12/2018

并且有大约30行。

dataTableColNames是这样的:

colID | colNameEn       | colNameRu
------|-----------------|--------------
col1  | "Column 1 Name" | "Колонка 1"
...   | ...             | ...
col9  | "Column 9 Name" | "Колонка 9"

并且可以包含列名称,甚至包含5个或更多单词。此外,对于相同数据的列标题可能存在不同的翻译。

如何进行SELECT查询以获得这样的表格?

Column 1 name | ... | Column 9 Name
--------------|-----|--------------
123           | ... | 02/02/2018 

PL / SQL Developer v10

这个问题并不完全重复,因为我的表没有entity_id或任何外键。此外,它是关于列别名,而不是从许多不同的表中查询不同的值。或者是吗?无论如何,我没有在this question的答案中看到我的问题的解决方案。或者也许不明白。如何在我的问题上实现它?

1 个答案:

答案 0 :(得分:1)

您可能尝试的解决方案是同时UNION两个查询,第一个来自dataTableColNames,第二个来自dataTable。第一个查询使用一个子查询,该子查询将dataTableColNames连接到每个列的自身,然后外部查询用于将列名行旋转到列中。第二个查询返回数据。以下查询是未经测试的。您还需要使用sql工具来抑制返回控制台或gui的列名标题(col1, col2, col3),或者在客户端或中间件中对结果进行后处理。

SELECT col1, col2, col3
FROM (
 SELECT c1.col1Name as col1, c2.col2Name as col2, c3.col3Name as col3
   FROM dataTableColNames c1
   JOIN dataTableColNames c2 on c1.colId = c2.colId
   JOIN dataTableColNames c3 on c1.colId = c3.colId
  WHERE c1.colId = 'col1'
    AND c2.colId = 'col2'
    AND c3.colId = 'col3' 
) t1
UNION
SELECT col1, col2, col3 from dataTable