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

时间:2017-09-28 09:04:40

标签: sql oracle

我有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

我想要获得的是获得source_item-dest_item作为结果。 根据以下数据:

CN1-CN2
CN2-CN3

我尝试的是:

   SELECT A.Column_Name 
FROM TABLE1 A  inner join 
TABLE2 B
ON A.QUERY_CODE=B.QUERY_CODE

但这甚至不接近我的目标

3 个答案:

答案 0 :(得分:2)

您需要做的是使用TABLE2来标识source_itemdest_item,然后第一次与TABLE1一起用source_item替换TABLE1列名,然后再次与dest_item一起使用其他列名替换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

call.enqueue(new Callback<somePOJO>() {

        @Override
        public void onResponse(Call<somePOJO> call, Response<somePOJO> response){
        }

        @Override
        public void onFailure(Call<somePOJO> call, Throwable t) {

        }

forum

上运行示例

答案 1 :(得分:1)

这应该有效。目前还不清楚你的Query_Code是做什么的,所以我在查询中省略了它。

编辑也插入了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;

答案 2 :(得分:0)

你去吧

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;