【问题标题】:How can I prepare WITH CLAUSE using Oracle .Net entity framework queries如何使用 Oracle .Net 实体框架查询准备 WITH CLAUSE
【发布时间】:2018-09-02 09:06:52
【问题描述】:

我正在尝试使用实体查询来实现以下查询。 WITH子句是如何实现的?

WITH EVENTS AS
(select * from EVENTS_ATCS WHERE ROWNUM <10)
select * from EVENTS A
LEFT JOIN ATCS_EVENT_MASTER B ON
(A.TYPEID = B.EventId)
AND
((A.BYTE1 >= B.GE_BYTE1 AND A.BYTE1 <= B.LE_BYTE1) OR (A.BYTE1 = B.E_BYTE1))
AND
((A.BYTE2 >= B.GE_BYTE2 AND A.BYTE2 <= B.LE_BYTE2) OR (A.BYTE2 = B.E_BYTE2))
AND
((A.BYTE3 >= B.GE_BYTE3 AND A.BYTE3 <= B.LE_BYTE3) OR (A.BYTE3 = B.E_BYTE3))

【问题讨论】:

  • 这里真正的问题是什么?为什么要用 ROWNUM 限制子查询?如果您有一些适当的过滤条件,这似乎是一个简单的连接查询。

标签: oracle entity-framework entity-framework-6 common-table-expression


【解决方案1】:

如果我理解这个问题,那就是您不能使用WITH 因式分解子句。如果是这样,请将EVENTS CTE 移动到FROM 子句中:

select * 
from 
  (select * from EVENTS_ATCS WHERE ROWNUM <10) A           --> this is EVENTS
LEFT JOIN ATCS_EVENT_MASTER B ON (A.TYPEID = B.EventId)
AND ((A.BYTE1 >= B.GE_BYTE1 AND A.BYTE1 <= B.LE_BYTE1) OR (A.BYTE1 = B.E_BYTE1))
AND ((A.BYTE2 >= B.GE_BYTE2 AND A.BYTE2 <= B.LE_BYTE2) OR (A.BYTE2 = B.E_BYTE2))
AND ((A.BYTE3 >= B.GE_BYTE3 AND A.BYTE3 <= B.LE_BYTE3) OR (A.BYTE3 = B.E_BYTE3))

【讨论】:

  • 感谢您的回复,如何在 Entity Framework for Oracle 中为此查询准备联接子句?
猜你喜欢
  • 1970-01-01
  • 2014-01-11
  • 2012-06-21
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多