簡體   English   中英

展開和別名在OrientDB SQL查詢中一起使用

[英]Unwind and alias used together in an OrientDB SQL query

使用OrientDB 2.2.16並將給定的以下數據導入到文檔數據庫中:

{
    "teams": [
        {
            "name": "McLaren F1 Team",
            "nationality": "british",
            "headquarters": {
                "city": "Woking",
                "country": "England"
            },
            "drivers": [
                {
                    "name": "Fernando Alonso",
                    "nationality": "Spanish",
                    "yearOfBirth": "1980"
                },
                {
                    "name": "Jenson Button",
                    "nationality": "British",
                    "yearOfBirth": "1980"
                }
            ]
        },
        {
            "name": "Scuderia Ferrari",
            "nationality": "italian",
            "headquarters": {
                "city": "Maranello",
                "country": "Italy"
            },
            "drivers": [
                {
                    "name": "Sebastian Vettel",
                    "nationality": "German",
                    "yearOfBirth": "1987"
                },
                {
                    "name": "Kimi Raikkonen",
                    "nationality": "Finnish",
                    "yearOfBirth": "1979"
                }
            ]
        }
    ]
}

使用unwind ,我想找到返回所有驅動程序名稱的查詢。 確切地說,結果必須是一個文檔列表,其中每個文檔都在名為“ name”的屬性中包含驅動程序的名稱。

我的(無效的)嘗試:

SELECT drivers.name FROM Teams展開驅動程序

它幾乎返回了我期望的結果,但是該名稱位於名為“ drivers”的屬性下。

SELECT driver.name AS name FROM車隊展開車手

完全失敗,沒有任何放松。

SELECT drivers.name AS名稱FROM車隊展開名稱

這可行,但是實際上是一個錯誤,因為別名適用於驅動程序,而不適用於名稱,這就是展開有效的原因。

有關如何詳細說明查詢的一些背景知識:

  1. Teams數據是從存儲中獲取的
  2. 每個記錄都被過濾(在這種情況下,不過濾,因為您沒有WHERE條件)
  3. 對於每個源記錄,引擎都會計算投影並創建一個新文檔,其中包含綁定到別名的投影值

就您而言,在此步驟中,您有兩個記錄:

查詢1:在v 2.2中,drivers.name的默認別名是drivers (在v 3.0中,它將更改,默認別名將是drivers.name

|              drivers                    |
+-----------------------------------------+
| ["Fernando Alonso", "Jenson Button" ]   |
| ["Sebastian Vettel", "Kimi Raikkonen" ] |

查詢2和3:在這種情況下,別名為name ,您需要明確定義它

|              name                       |
+-----------------------------------------+
| ["Fernando Alonso", "Jenson Button" ]   |
| ["Sebastian Vettel", "Kimi Raikkonen" ] |
  1. UNWIND是根據步驟3的結果計算的。結果的別名與上一步相同

查詢1如預期那樣展開drivers ,但別名仍然是drivers

查詢2嘗試展開drivers但沒有找到它,這就是為什么它失敗的原因

查詢3解除預期的name

結論: 這是預期的行為

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM