首页 > 解决方案 > 如何查询在另一个表中映射列名的选择表?

问题描述

所以,我有两张桌子: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 开发者 v10

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

标签: sqloracle

解决方案


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

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

推荐阅读