【问题标题】:SQL dynamically join to a user/data supplied tableSQL 动态连接到用户/数据提供的表
【发布时间】:2012-01-18 22:51:15
【问题描述】:

我想要类似的东西:

SELECT * from metric_data m, 
    (SELECT table_for_join FROM join_tables WHERE from_table = 'usersupplied') u,
    WHERE m.id = u.id

这可能吗?

如果这很重要,我正在使用 oracle 11g。

【问题讨论】:

    标签: sql oracle dynamic join oracle11g


    【解决方案1】:

    我认为你需要使用动态 sql。像这样的东西(对不起,我目前无法测试它,但我希望它应该可以工作

    CREATE PROCEDURE getMetricData (in_table_name varchar2)
    IS 
      real_tab_name varchar(32);
    BEGIN
      SELECT table_for_join into real_tab_name 
      FROM join_tables WHERE from_table = in_table_name;
      IF (real_tab_name IS NOT NULL) THEN
      EXECUTE IMMEDIATE 'SELECT * from metric_data m, ' || real_tab_name || ' u 
       WHERE m.id = u.id';
      END IF;
    END;
    

    【讨论】:

    • 这看起来很有希望,我将在今天晚些时候测试
    【解决方案2】:
    SELECT m.* from metric_data m 左连接 join_tables u ON(m.id = u.id AND u.from_table='usersuplied') 其中 1=1

    【讨论】:

    • 这没有任何意义,你确定你理解这个问题吗? “join_tables”不包含“id”列,而且我没有看到我实际加入的第三个动态表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多