Sql 交叉连接过滤器

Sql 交叉连接过滤器,sql,oracle,crystal-reports,cross-join,Sql,Oracle,Crystal Reports,Cross Join,我需要为查询“制造”记录,但同时限制从“查找”表返回的值列表 有没有一种方法可以在不必使用内嵌视图的情况下使用交叉联接的“过滤器” 此语法按预期工作(我得到了预期的结果): 不幸的是,如果我使用这种方法,我需要将命令对象与Crystal Reports一起使用,而不是使用其本机的“可视化链接专家”。命令对象激怒了我 将筛选器添加到WHERE子句会导致相等联接,这在这种情况下是不可取的 SELECT E.ID, M.VALUE, MT.ID, MT.NAME FROM EN

我需要为查询“制造”记录,但同时限制从“查找”表返回的值列表

有没有一种方法可以在不必使用内嵌视图的情况下使用交叉联接的“过滤器”

此语法按预期工作(我得到了预期的结果):

不幸的是,如果我使用这种方法,我需要将命令对象与Crystal Reports一起使用,而不是使用其本机的“可视化链接专家”。命令对象激怒了我

将筛选器添加到WHERE子句会导致相等联接,这在这种情况下是不可取的

SELECT
  E.ID,  
  M.VALUE,
  MT.ID,
  MT.NAME
FROM
  ENCOUNTER         AS E
CROSS JOIN
  MEASUREMENT_TYPE  AS MT
LEFT OUTER JOIN
  MEASURE           AS M
    ON  E.ID  = M.ENCOUNTER_ID
    AND MT.ID = M.MEASURE_TYPE_ID
WHERE
  MT.ID IN ('6941','6946')
在这种情况下,您可以将过滤器放在WHERE子句中,因为它是一个左连接,并且您正在过滤查询的左侧

如果要筛选
度量值
表,则必须在
左JOIN
的ON子句中进行筛选


另一种选择是
内部连接
而不是
交叉连接
,并在那里使用过滤器。这是因为ON子句实际上不需要引用这两个表

  ENCOUNTER         AS E
INNER JOIN
  MEASUREMENT_TYPE  AS MT
    ON MT.ID IN ('6941','6946')

在这种情况下,
内部联接
的作用与
交叉联接
相同。替换:

CROSS JOIN (
      SELECT  ID, NAME
      FROM    MEASUREMENT_TYPE
      WHERE   ID IN ('6941','6946')
) MT


这是无效的SQL。
[
]
是SQL标识符中的非法字符。@a_horse_,没有名字-愚蠢的甲骨文,总是绊倒我,我永远也学不会。但是我确实喜欢那些
[]
,所以:(选择您的答案是因为它是唯一一个可以(几乎)在Crystal Reports中实现的。@Dems:这不是愚蠢的Oracle。这是SQL标准所说的(SQL Server是唯一接受这种奇怪符号的DBMS)
CROSS JOIN (
      SELECT  ID, NAME
      FROM    MEASUREMENT_TYPE
      WHERE   ID IN ('6941','6946')
) MT
INNER JOIN MEASUREMENT_TYPE MT ON MT.ID IN ('6941','6946')