Oracle SQL用联合加入派生表

时间:2018-07-16 12:22:24

标签: sql oracle

我有这样的查询:

select       product_code,
             count(foo.container_id) as "quantity_of_containers",
             max((trunc(foo.update_date - foo.creation_date))) as "max_days"
from product
inner join stock on stock.product_id = product.product_id
inner join (
 select arch.container_id,
        arch.creation_date,
        arch.update_date
from arch
union all
select 
        container.container_id,
        container.creation_date,
        container.update_date
from container) foo on stock.container_id = foo.container_id
group by product_code
order by "max_days" desc

问题是此查询出了什么问题,当我运行它时,似乎还可以,但是经过进一步检查,看来只有容器中的记录在那里,由于某种原因,拱表中没有单个记录。是否存在使用相同逻辑编写此查询的不同方法?我需要从arch和container中获取记录,因为一个表是存档表,另一个是当前表。在容器和arch上结合两个独立查询的方法也正在工作,但我正在寻找更快的东西。
@edit: 我正在发送一些示例数据,以使我的意思更加清楚。

+---------------+----------+----------+
| product_code  | quantity | max_days |
+---------------+----------+----------+
| 5999990024965 |      345 |       85 |
| 5999990027614 |      326 |       81 |
| 5999990023753 |       87 |       77 |
+---------------+----------+----------+

拱表中的数据

+---------------+----------+----------+
| product_code  | quantity | max_days |
+---------------+----------+----------+
| 5999990082415 |       11 |       84 |
| 5999990059615 |        2 |       58 |
| 5999990023470 |        1 |       41 |
+---------------+----------+----------+

容器表中的数据。

但是,当我运行查询时,我粘贴到了这里,我只从容器表中获取记录,
是的,stock.container_id确实与foo.container_ids(拱形和容器)匹配

2 个答案:

答案 0 :(得分:2)

这不是答案,但是评论太久了。

运行以下查询会得到什么?

select *
from product
inner join stock on stock.product_id = product.product_id
inner join (
 select arch.container_id,
        arch.creation_date,
        arch.update_date,
        'arch' qry
from arch
union all
select 
        container.container_id,
        container.creation_date,
        container.update_date,
        'container' qry
from container) foo on stock.container_id = foo.container_id
where foo.qry = 'arch';

答案 1 :(得分:1)

真的很抱歉,但似乎原因是软件错误?服务器重新启动后,查询提供了所需的数据。谢谢大家的宝贵时间,看来第一个查询实际上是正确的。

真的很抱歉,抽出宝贵的时间,谢谢大家。