在SQL中查询所需列存储在另一个表中的列

时间:2018-09-17 20:17:01

标签: sql oracle

我正在尝试创建一个查询,其中根据位于另一个表上的数据选择了选定的行。本质上,一个表具有我们要匹配的列名以及我们要获取的值。

例如,说这些是我的桌子:

TABLE_1

TABLE_2_COL | VALUE
--------------------
COL_1       | dog
COL_2       | cat
COL_3       | fish

TABLE_2

id |  COL_1 | COL_2 | COL_3
------------------------
1  |  cow   | seal  | snake
2  |  cow   | cat   | snake
3  |  cow   | seal  | dog  
4  |  fish  | seal  | snake

我想做类似的事情

select t2.* 
from TABLE_1 t1 
left join TABLE_2 t2
on t2[t1.TABLE_2_COL] = t1.VALUE   <- this line obviously not correct, but it's the line that respresents what I'm trying to do

将会返回

id |  COL_1 | COL_2 | COL_3
----------------------------
2  |  cow   | cat   | snake

表1的“ TABLE_2_COL”列将始终包含TABLE_2列之一的名称。由于TABLE_2中唯一要满足查询条件的行是2(其中COL_2是'cat'),因此返回的行。

1 个答案:

答案 0 :(得分:1)

这不是很好的数据格式,但是您可以这样做:

select t2.*
from table_2 t2 join
     table_1 t1
     on (t1.TABLE_2_COL = 'col1' and t1.value = t2.col1) or
        (t1.TABLE_2_COL = 'col2' and t1.value = t2.col2) or
        (t1.TABLE_2_COL = 'col3' and t1.value = t2.col3);