【问题标题】:SQL from multiple tables without join来自多个表的 SQL 没有连接
【发布时间】:2017-10-13 01:28:58
【问题描述】:

我在 oracle 中有三个表,其中包含今天、昨天和前天的数据,并且有一个列名 'date' 。我需要根据“日期”列找到包含昨天数据的表的表名。因为不需要加入,所以不加入怎么查询

【问题讨论】:

  • 请移除mysql标签。显示示例表数据、预期输出以及您尝试过的内容。

标签: sql oracle11g


【解决方案1】:

您可以将这些表合并在一起。

例如(假设所有日期字段都包含 12 PM):

SELECT tablename
FROM (
    SELECT 'TABLE1' tablename, datefield
    FROM TABLE1
    UNION ALL
    SELECT 'TABLE2' tablename, datefield
    FROM TABLE2
    UNION ALL
    SELECT 'TABLE3' tablename, datefield
    FROM TABLE3)
WHERE datefield = TRUNC(SYSDATE - 1);

如果所有日期字段都不是下午 12 点,则调整为在特定时间使用 BETWEEN。

对于非常大的表,将 WHERE 语句移动到每个表的 UNION 中。

【讨论】:

    【解决方案2】:

    如果您只想要表名并且知道有一个:

    select (case when exists (select 1 from table1 where datefield = trunc(sysdate - 1))
                 then 'table1'
                 when exists (select 1 from table2 where datefield = trunc(sysdate - 1))
                 then 'table2'
                 when exists (select 1 from table3 where datefield = trunc(sysdate - 1))
                 then 'table3'
            end) as whichtable
    from dual;
    

    这将返回满足您条件的第一个表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多