【问题标题】:Marklogic - Optic API: Joining views by value (op:on does not support values, only column-references)Marklogic - 光学 API:按值连接视图(op:on 不支持值,仅支持列引用)
【发布时间】:2022-01-13 07:59:10
【问题描述】:

我正在尝试使用op:join-left-outer 函数加入两个视图“A”和“B”。

我有两个用于 JOIN 的“ON 条件”:

  1. 第一个是简单的op:on 函数。 (这不是我的问题的一部分)
  2. 第二个应该是按值连接列的 ON 条件 ($myValue)。但是op:on 不支持值,只支持列引用。所以下面的代码不起作用:
let $aView := op:from-view("foobar", "A")
let $bView := op:from-view("foobar", "B")

let $myValue := "42"

let $opticQuery := op:join-left-outer(
  $aView, 
  $bView, 
  (
    op:on(op:view-col("A", "SOME_COLUMN"), op:view-col("B", "SOME_COLUMN")),
    
    (: Not working pseudo code following :)
    op:on(op:view-col("B", "SOME_OTHER_COLUMN"), $myValue)
  )
)

在 SQL 中我会这样写:

SELECT * FROM A
LEFT JOIN B
ON A.SOME_COLUMN = B.SOME_COLUMN
AND B.SOME_OTHER_COLUMN = '42'

我的问题: 有没有办法在 Optic API 中做同样的事情,还是我做错了什么?

【问题讨论】:

    标签: xquery marklogic marklogic-10


    【解决方案1】:

    有趣的是,当尝试使用第二个 op:on() 并在左右列引用时(通过将 42 绑定为 aView 上的新列),我也没有得到预期的结果。

    但是,如果以不同的方式表达,Optic API 似乎确实允许您做您想做的事:

    因此,我希望您可以删除第二个 op:on() 并将以下内容用作第四个参数:op:eq(op:view-col("B", "SOME_OTHER_COLUMN"), $myValue)

    下面是一个独立样本 - 结果第二行的外部连接表为空值

    xquery version "1.0-ml";
    import module namespace op="http://marklogic.com/optic"
     at "/MarkLogic/optic.xqy";
    
    let $myVal := 42
    
    let $plan-table-1 := op:from-literals((
            map:entry("col1", 1) => map:with("val", "a"),
            map:entry("col1", 2) => map:with("val", "b")
            ), "table1")     
    
    let $plan-table-2 := op:from-literals((
            map:entry("col1", 1) => map:with("val2", "c") => map:with("someOtherCol", 42),
            map:entry("col1", 2) => map:with("val2", "d") => map:with("someOtherCol", 8)
            ), "table2")
    
    
    return op:join-left-outer(
      $plan-table-1,
      $plan-table-2, 
      op:on(op:view-col("table1", "col1"), op:view-col("table2", "col1")), 
      op:eq(op:view-col("table2", "someOtherCol"), $myVal)
    )=>op:result()  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2011-06-04
      • 2021-07-09
      • 1970-01-01
      相关资源
      最近更新 更多