我正在使用pyodbc和postgres。
我可以为多列添加别名吗?
以下是我的问题描述:
数据结构:
data
id | c1 | c2
-------------
1 | 11 | 12
2 | 21 | 22
表示法:c表示列
dictionary
id | key | value
----------------
1 | k1 | v11
1 | k2 | v12
2 | k1 | v21
2 | k2 | v22
表示法:k代表键,v代表值
您可以将k1和k2视为另外两列。数据结构就是这种方式,因为它在不断变化。我没有设计它,我只需要配合它。
我无法弄清楚sql查询给我类似下面的内容(最重要的是,对于某些行,我可以通过某个名称访问k1和k2列):
data
id | c1 | c2 | k1 | k2
-------------------------
1 | 11 | 12 | v11 | v12
2 | 21 | 22 | v21 | v22
我一直遇到的问题是,如果我对表进行别名,那么sql结果将包含字典表中的两个“key”列,这意味着我无法控制我访问哪一列,但是如果我别名行,然后我无法控制在sql语句中引用哪些表。
我正在考虑修复两个列:
SELECT * FROM data
FULL JOIN dictionary AS a1,a2,a3
ON data.id = a1
FULL JOIN dictionary AS a4,a5,a6
ON data.id = a4
WHERE a2 = k1 and a5 = k2
表示法:a表示别名
这样做的结果理论上看起来像
data
id | c1 | c2 | a3 | a6
-------------------------
1 | 11 | 12 | v11 | v12
2 | 21 | 22 | v21 | v22
注意所有的技术都在这里,但是3和6是我感兴趣的
答案 0 :(得分:2)
您可以为整个表添加别名,例如dictionary as d1
。然后将该表中的列名称称为d1.col1
。例如:
SELECT d.id
, d.c1
, d.c2
, d1.value as a3
, d2.value as a6
FROM data as d
LEFT JOIN
dictionary as d1
ON data.id = d1.id
and d1.key = 'k1'
LEFT JOIN
dictionary as d2
ON data.id = d2.id
and d2.key = 'k2'