sql - 如何查询在另一个表中映射列名的选择表?
问题描述
所以,我有两张桌子:dataTable
和dataTableColNames
.
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
也没有任何外键。此外,它与列别名有关,而不是从许多不同的表中查询不同的值。或者是吗?无论如何,我在这个问题的答案中看不到我的问题的解决方案。或者可能不明白。如何在我的问题上实施它?
解决方案
您可能会尝试的解决方案是将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
推荐阅读
- qt - 在 Ubuntu 21.04 上安装 Qt5
- postgresql - 如何在 Debian 9 中安装 utf8 语言环境
- google-sheets - 尝试 COUNTIFS 日期 = 本周(周日至周六)?
- pandas - 尝试使用 beauifulsoup 遍历列表时,For 循环返回错误
- python - 如何逐个比较两个列表,然后如果它们相同则输出 false 或 true
- electron - 使用 nodemon 时,“电子”不被识别为内部或外部命令
- r - 如何将 ISO-4217-Code 转换为 R 中的货币名称
- azure-logic-apps - 如何使用过滤器数组过滤来自 API 调用的数据?
- javascript - Firebase val() returns an empty object but when I use the console after the page is loaded, the object is there
- javascript - 返回具有最小属性值的对象键