【问题标题】:Query columns in SQL where the columns we want are stored in another table在 SQL 中查询我们想要的列存储在另一个表中的列
【发布时间】:2018-09-17 20:17:00
【问题描述】:

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

例如,假设这些是我的表格:

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

表一的“TABLE_2_COL”列将始终包含 TABLE_2 列之一的名称。由于 TABLE_2 中满足我要进行的查询的唯一行是 2(其中 COL_2 是“cat”),所以这就是返回的行。

【问题讨论】:

标签: sql oracle


【解决方案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);

【讨论】:

  • 这行得通。但是,我希望以一种不将每一列硬编码到语句中的方式来完成
  • @Santi 。 . .没有其他方法可以引用表中的列——我能想到的。如果您将table_2 存储为键值对,那么您可以更轻松地做您想做的事情。
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
相关资源
最近更新 更多