簡體   English   中英

轉換復雜的關系SQL查詢,使其在OrientDB中運行

[英]Convert a complex relational SQL query so that it runs in OrientDB

我是OrientDB的新手。 我有一個表結構,如下所示。 我已經嘗試了很多查詢,但是仍然無法弄清楚如何在OrientDB中實現以下SQL查詢。 我需要加入來自4個不同類的數據。 任何幫助是極大的贊賞。

select Users.Name as uName,
   Shops.Name as shopName,
   ShopTotalPurchases.Total

from Users, Shops, Purchases,ShopTotalPurchases 

where Users.Id=10 

and Purchases.UserId=Users.Id

and Purchases.Date="date2"

and ShopTotalPurchases.Date="date2"

and ShopTotalPurchases.ShopId = Shops.Id

> reldb> SELECT * FROM Users;
+----+--------+-------+
| Id | Name   | Phone |
+----+----------------+
| 10 | User 1 | 1111  |
+----+----------------+
| 20 | User 2 | 2222  |
+----+----------------+


> reldb> SELECT * FROM Shops;
+----+--------+-------+
| Id | Name   | Phone |
+----+----------------+
| 30 | Shop 1 | 1111  |
+----+----------------+
| 40 | Shop 2 | 2222  |
+----+----------------+

> reldb> SELECT * FROM Purchases; [unique per combo of UserId, ShopId and Date]
+----+--------+--------+--------+------+-----------+
| Id | UserId | Item   | ShopId | Date | ItemPrice |
+----+--------+-----------------+------+-----------+
|  0 | 10     | First  |  30    |date1 |   100     |
+----+--------+--------+--------+------+-----------+
|  1 | 10     | Second |  30    |date2 |   200     |
+----+--------+--------+--------+------+-----------+
| 21 | 10     | Third  |  40    |date3 |   300     |
+----+--------+--------+--------+------+-----------+
| 41 | 20     | Fourth |  40    |date4 |   400     |
+----+--------+--------+--------+------+-----------+
| 82 | 20     | Fift   |  30    |date5 |   500     |
+----+--------+--------+--------+------+-----------+

> reldb> SELECT * FROM ShopTotalPurchases;
+----+--------+--------+------+
| Id | Total  | ShopId | Date |
+----+--------+--------+------+
|  0 | 1000   |  30    |date1 |
+----+--------+--------+------+
|  1 | 2000   |  30    |date2 |
+----+--------+--------+------+
| 21 | 3000   |  40    |date2 |
+----+--------+--------+------+

您可以使用以下查詢:

select $a.Name as uName, $b.Name as shopName, $c.Total as Total from Purchases
let $a = (select Name from User where Id = 10 and Id in $parent.current.UserId),
    $b = (select Name from Shops where Id in $parent.current.ShopId),
    $c = (select Total from ShopTotalPurchases where Date = 'date2' and ShopId in $parent.current.ShopId)
where Date = 'date2' unwind uName, shopName, Total

控制台輸出

----+------+-----+--------+------
#   |@CLASS|uName|shopName|Total
----+------+-----+--------+------
0   |null  |User1|Shop1   |2000.0
----+------+-----+--------+------

暫無
暫無

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

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