【问题标题】:how to know the source table from a complex sql query如何从复杂的 sql 查询中知道源表
【发布时间】:2016-08-10 03:11:58
【问题描述】:

PFB 我想知道我可以在其中找到这些的实际表的查询(pin_ein,engineer_pin,transaction_date,EFFECTIVE_WEEK)....

select count(1),pin_ein,engineer_pin,transaction_date,EFFECTIVE_WEEK from 
       (SELECT vw1.pin_ein, vw1.engineer_pin,
                               vw1.transaction_date, vw1.effective_week,
                               vw1.stores_tools_cost,
                               (vw1.stores_total_cost - vw1.stores_tools_cost
                               ) stores_total_cost_excl_tools,
                               vw1.item_count, vw1.stores_visit_count,
                               CASE
                                  WHEN vw1.stores_total_cost <
                                         5
                                     THEN vw1.stores_visit_count
                               END stores_low_cost_visit_count,
                               vw1.actual_ouc ouc, er.eng_name engineer_name,
                               CASE
                                  WHEN c.home_parked IS NOT NULL
                                     THEN c.home_parked
                                  ELSE 'N'
                               END home_parker,
                               CASE
                                  WHEN c.home_parked IS NOT NULL
                                     THEN c.commute_time
                                  ELSE -99
                               END commute_time,
                               vw1.stores_com_cost ---v9.3---
                          FROM (SELECT   pin_ein, engineer_pin, actual_ouc,
                                         transaction_date, effective_week,
                                         NVL
                                            (SUM
                                                (CASE
                                                    WHEN (   cow LIKE '%TOOL%'
                                                          OR cow LIKE
                                                                     '%TOOLE%'
                                                         )
                                                       THEN transaction_value
                                                 END
                                                ),
                                             0
                                            ) stores_tools_cost,
                                         SUM
                                            (transaction_value
                                            ) stores_total_cost,
                                         SUM (transaction_quantity)
                                                                   item_count,
                                         COUNT
                                            (DISTINCT sta_code
                                            ) stores_visit_count,
                                         NVL
                                            (SUM
                                                (CASE
                                                    WHEN cow in (SELECT cow FROM orbit_odw.stores_cow_ref)
                                                       THEN transaction_value
                                                 END
                                                ),
                                             0
                                            ) stores_com_cost     ---v9.3---
                                    FROM orbit_odw.stores_transaction_dtls
                                   WHERE effective_week BETWEEN 201543
                                                            AND 201610
                                     /***Ver 6.0---last 13 weeks data to be considered***/
                                     AND transaction_date
                                            BETWEEN to_date('19-10-2015','dd-mm-yyyy')
                                                AND to_date('06-03-2016','dd-mm-yyyy')
                                /***Ver 6.0---last 13 weeks data to be considered***/
                                GROUP BY pin_ein,
                                         engineer_pin,
                                         actual_ouc,
                                         transaction_date,
                                         effective_week) vw1,
                               (SELECT *
                                  FROM orbit_odw.dim_wms_rmdm
                                 WHERE current_status = 1) er,
                               (SELECT engineer_ein, commute_time,
                                       home_parked
                                  FROM orbit_odw.eng_parking_at_home_dtls
                                 WHERE rec_end_date > SYSDATE
                                   AND home_parked = 'Y') c
                         WHERE TO_CHAR (vw1.pin_ein) = er.ein
                           AND vw1.pin_ein = c.engineer_ein(+))  group by pin_ein,engineer_pin,transaction_date,EFFECTIVE_WEEK having count(1)>1; 

请帮忙.. 提前致谢

【问题讨论】:

  • 你不能,除非你在每个表的定义中搜索
  • Oracle 还是 MySQL?不要标记未涉及的产品...
  • 解决这个问题的秘诀是弄清楚别名为vw1. 的子查询是如何工作的。看起来这是您的 stores_transaction_dlts 表的聚合。您的查询肯定有足够的别名注释来明确地解决这个问题。
  • 为此您需要一个 SQL 解析器,然后您需要在其上编写相当多的代码以像 RDBMS 那样“理解”查询。最后它甚至可能是不可能的,因为并非所有列都有一个表源(例如计算列)或多个表源(例如来自UNION ALL 的列)。

标签: mysql sql plsql


【解决方案1】:

基本上,如果我正确理解您的问题。您需要了解外部 SELECT 从何处获取数据。所以有一个简单的规则集用来获取这些数据。步骤如下。

  • 检查列输出,即在您的情况下,它是 pin_ein,engineer_pin,transaction_date,EFFECTIVE_WEEK
  • 检查外部查询所在的内联视图或表 获取数据。在您的情况下,它是您拥有的唯一内联视图 使用过 --> 很容易识别:P
  • 现在确定您的内联视图 VW1 是如何填充数据的。在你的 案例表 orbit_odw.stores_transaction_dtls 用于填充 必填字段。

希望需要这么多信息。此外,对于简单查询,您始终可以转到 ALL_TAB_COLUMNS 系统表以轻松识别表的列。

【讨论】:

  • 不客气。如果对您有帮助,请采纳答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
相关资源
最近更新 更多