Select Oracle 中的可配置列名称 SQL

Select configurable column names in Oracle SQL

我有一个 table,其中包含可配置的列名,我可以这样查询:

SELECT
    column_name
FROM
    my_config
WHERE
    condition = 'MY_CONFIG_COLUMNS'

这就是 'my_config' tables 的样子。

COLUMN_NAME              CONDITION
----------------------------------
    COLUMN1      MY_CONFIG_COLUMNS
    COLUMN2      MY_CONFIG_COLUMNS
    COLUMN3  NOT_MY_CONFIG_COLUMNS
    COLUMN4  NOT_MY_CONFIG_COLUMNS

我的另一个 table 看起来像这样:

ID  COLUMN1 COLUMN2 COLUMN3 COLUMN4
ID1       X                       X
ID2       X       X       X       X
ID3       X               X

但是,我会 select 只查找那些 returns 上面的查询在我的其他 table 中的那些列,有点像下面这样:

SELECT
    the_columns_in_the config
FROM
    my_other_table;

我怎样才能做到这一点?

预期结果:

COLUMN1 COLUMN2
---------------
      X 
      X       X
      X

这将是这两个表之间的连接(至少,我是这样理解这个问题的;如果您发布示例数据和期望的结果会有所帮助)。

select a.column_name
from my_config a join my_other_table b on b.the_column_in_the_config = a.column_name
where a.condition = 'MY_CONFIG_COLUMNS';

您将需要对列列表进行动态查询。它可以是这样的:

DECLARE 
  l_column_list VARCHAR2(200);
  l_query       VARCHAR2(300);
BEGIN
  SELECT listagg(column_name,',') WITHIN GROUP (ORDER BY column_name)
    INTO l_column_list
    FROM my_config
   WHERE condition = 'MY_CONFIG_COLUMNS';
   
  l_query := 'SELECT '||l_column_list||' FROM my_other_table';
  EXECUTE IMMEDIATE l_query;
  --do whatever you ant with the results
END;
/