簡體   English   中英

SQL 圖最短路徑示例

[英]SQL Graph shortest path example

提供在 SQL Server 2019 上使用最短路徑的示例。技術稱為 SQL Graph。

Car -> BodyWork
 |
 V
Wheel -> Tyre

我們如何列出從根目錄下來的所有部分和相關路徑?

CREATE TABLE PRODUCT (
       ProductID int not null identity primary key,
       ProductName varchar(50) 
) AS Node;

INSERT INTO PRODUCT(ProductName) VALUES ('Car'),('BodyWork'),('Wheel'),('Tyre');

SELECT * FROM PRODUCT;

CREATE TABLE HAS_PART AS EDGE;


INSERT INTO HAS_PART ($from_id, $to_id)
VALUES ((SELECT $node_id FROM PRODUCT WHERE ProductId=1), (SELECT $node_id FROM PRODUCT WHERE ProductId=2))
,((SELECT $node_id FROM PRODUCT WHERE ProductId=1), (SELECT $node_id FROM PRODUCT WHERE ProductId=3))
,((SELECT $node_id FROM PRODUCT WHERE ProductId=3), (SELECT $node_id FROM PRODUCT WHERE ProductId=4));

SELECT * FROM HAS_PART;

SELECT
       P1.ProductID,
       P1.ProductName,
       COUNT(P2.ProductName) WITHIN GROUP (GRAPH PATH) AS [Depth],
       STRING_AGG(P2.ProductName,'->') WITHIN GROUP (GRAPH PATH) AS [Assembly],
       LAST_VALUE(P2.ProductID) WITHIN GROUP (GRAPH PATH) AS [Final Product ID]
FROM
       PRODUCT P1,
       PRODUCT FOR PATH P2,
       HAS_PART FOR PATH HP
WHERE MATCH(SHORTEST_PATH(P1(-(HP)->P2)+))
AND P1.ProductID = 1
ORDER BY P1.ProductID;

在此處輸入圖像描述

暫無
暫無

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

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