简体   繁体   English

带子查询的内部联接上的DB2 SQL语法

[英]DB2 SQL Syntax on inner join with subquery

I am not very well versed in SQL but my syntax seem correct and I am getting "TDEST.ENDZONE is not valid in the context where it is used" and didn't find much info on inner joins with subquery so far. 我不太精通SQL,但是语法似乎正确,并且得到“ TDEST.ENDZONE在使用它的上下文中无效”的信息,到目前为止,在子查询的内部联接方面找不到太多信息。

    select * from LYNX.LEGSUM T2 inner join
(    SELECT
      TLORDER.END_ZONE,LEGSUM.LS_DRIVER, LEGSUM.LS_POWER_UNIT
    FROM
      LYNX.LEGSUM LEGSUM
      LEFT OUTER JOIN LYNX.TLORDER TLORDER ON LEGSUM.LS_DLID = TLORDER.DETAIL_LINE_ID
    WHERE
      TLORDER.ORIGIN = 'PRO8060'
      AND LEGSUM.LS_ACTUAL_DATE >= '2017-01-01 00:00:00'
      AND LEGSUM.LS_ACTUAL_DATE < '2018-01-01 00:00:00'
      AND NOT (
        TLORDER.CURRENT_STATUS = 'CANCEL'
        OR TLORDER.CURRENT_STATUS = 'CANCL'
        OR TLORDER.CURRENT_STATUS = 'ENTRY'
      )
) TDEST
ON TDEST.ENDZONE = T2.LEGSUM.LS_FROM_ZONE
AND TDEST.LS_DRIVER = T2.LS_DRIVER
AND TDEST.LS_POWER_UNIT = T2.LS_POWER_UNIT

If any explanation are needed, what I am trying to achieve is to get a data set from my LEGSUM table that correspond to the result of my subquery wich will then be used to filter more data using "IN" function 如果需要任何解释,我试图实现的是从我的LEGSUM表中获取一个数据集,该数据集与子查询的结果相对应,然后将使用“ IN”函数来过滤更多数据

Thank you for any and all help 感谢您提供的所有帮助

Reconsider the use of a subquery since outer and subquery share same source table, LYNX.LEGSUM , at unit level. 重新考虑使用子查询,因为外部查询和子查询在单元级别共享相同的源表LYNX.LEGSUM Consider incorporating a self-join on this same table: 考虑在此表上合并自联接:

SELECT l2.*
FROM
  LYNX.LEGSUM l
LEFT OUTER JOIN LYNX.TLORDER t
  ON l.LS_DLID = t.DETAIL_LINE_ID
INNER JOIN LYNX.LEGSUM l2
  AND l2.LS_FROM_ZONE = t.END_ZONE
  AND l2.LS_DRIVER = l.LS_DRIVER
  AND l2.LS_POWER_UNIT = l.LS_POWER_UNIT

WHERE
  t.ORIGIN = 'PRO8060'
  AND l.LS_ACTUAL_DATE >= '2017-01-01 00:00:00'
  AND l.LS_ACTUAL_DATE < '2018-01-01 00:00:00'
  AND NOT (
    t.CURRENT_STATUS = 'CANCEL'
    OR t.CURRENT_STATUS = 'CANCL'
    OR t.CURRENT_STATUS = 'ENTRY'
  )

您在ON子句中使用的END_ZONE中缺少下划线

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM