【发布时间】:2017-10-13 01:28:58
【问题描述】:
我在 oracle 中有三个表,其中包含今天、昨天和前天的数据,并且有一个列名 'date' 。我需要根据“日期”列找到包含昨天数据的表的表名。因为不需要加入,所以不加入怎么查询
【问题讨论】:
-
请移除mysql标签。显示示例表数据、预期输出以及您尝试过的内容。
我在 oracle 中有三个表,其中包含今天、昨天和前天的数据,并且有一个列名 'date' 。我需要根据“日期”列找到包含昨天数据的表的表名。因为不需要加入,所以不加入怎么查询
【问题讨论】:
您可以将这些表合并在一起。
例如(假设所有日期字段都包含 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 中。
【讨论】:
如果您只想要表名并且知道有一个:
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;
这将返回满足您条件的第一个表。
【讨论】: