Sql 按另一个表中的id从一个表中获取列名

Sql 按另一个表中的id从一个表中获取列名,sql,oracle,Sql,Oracle,我有两张桌子 表1: Query_code | Item_code | Column_Name 2 | 1 | CN1 2 | 2 | CN2 2 | 3 | CN3 表2: Query_code | Source_item| dest_item | pair_code 2 | 1 | 2 | 1 2

我有两张桌子 表1:

Query_code | Item_code | Column_Name 
     2     |     1     |    CN1
     2     |     2     |    CN2
     2     |     3     |    CN3
表2:

Query_code | Source_item| dest_item | pair_code
     2     |     1      |    2      |    1
     2     |     2      |    3      |    2
我想要实现的是得到源项-目的项作为结果。 根据以下数据:

CN1-CN2
CN2-CN3
我尝试的是:

   SELECT A.Column_Name 
FROM TABLE1 A  inner join 
TABLE2 B
ON A.QUERY_CODE=B.QUERY_CODE
但这还不接近我的目标

给你

WITH table1  (query_code, item_code ,column_name ) AS 
(SELECT 2,1,'cn1' UNION ALL 
 SELECT 2,2,'cn2' UNION ALL 
 SELECT 2,3,'cn3'),
table2  (query_code , source_item, dest_item , pair_code) AS 
(SELECT 2,1,2,1 UNION ALL 
 SELECT 2,2,3,2)
SELECT a.column_name || '-' || c.column_name
FROM table1 a  
INNER JOIN table2 b ON a.item_code=b.source_item
INNER JOIN table1 c ON c.item_code=b.dest_item;

您需要做的是使用
TABLE2
标识
源项和
dest项
,然后第一次使用
TABLE1
连接,用列名替换
source项
,然后再次使用
TABLE1
连接,用另一列名替换
dest项

SELECT A.Column_Name, B.Column_Name
  FROM t2 C 
  LEFT JOIN t1 A 
     ON C.Source_item=A.Item_code 
  LEFT JOIN t1 B 
     ON C.Dest_item=B.Item_code
  WHERE C.Query_code=A.Query_code 
     AND C.Query_code=B.Query_code

上运行示例应该可以。不清楚您的查询代码的作用,所以我在查询中省略了它

编辑插入的查询代码条件

SELECT 
    Source.Column_Name || '-' || Dest.Column_Name AS ResultPair 
FROM 
    TABLE2 B 
        INNER JOIN TABLE1 Source 
            ON B.source_item = Source.item_code AND B.Query_code = Source.Query_code
        INNER JOIN TABLE1 Dest 
            ON B.dest_item = Dest.item_code AND B.Query_code = Dest.Query_code;

加入tableA两次。(一次表示来源,一次表示目的地)您的问题令人困惑,因为您的列名是“column_name”。@PeterAbolins CN1、CN2、CN3在列下name@jarlh我将尝试此方法。我认为还应添加查询代码,C.query\u code=A.query\u code这取决于您希望如何使用
query\u code
。。源项和目标项是否都需要匹配查询代码?如果只有一个匹配而另一个不匹配呢?情况取决于您需要的行为类型。