PostgreSQL中Outer Apply的等效语法是什么

aya*_*nix 7 sql-server postgresql lateral-join

我试图找到一个关于从MSSQL到PostgreSQL的等效使用OUTER APPLY的SQL查询,但似乎很难找到.

我的MSSQL示例查询是这样的.

希望有人可以帮我解决我的问题.提前致谢.

SELECT table1.col1, table1.col2, Supp.ID, Supp.Supplier

FROM SIS_PRS table1 

OUTER APPLY (SELECT TOP 1 ID, SupplierName  FROM table2 WHERE table2.ID = table1.SupplierID) AS Supp
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 10

这是一个横向连接:

SELECT table1.col1, table1.col2, Supp.ID, Supp.Supplier
FROM SIS_PRS table1 LEFT JOIN LATERAL
     (SELECT ID, SupplierName
      FROM table2
      WHERE table2.ID = table1.SupplierID
      FETCH FIRST 1 ROW ONLY
     ) Supp
     ON true;
Run Code Online (Sandbox Code Playgroud)

但是,只需一个相关的子查询,您就可以在任一数据库中非常接近:

SELECT table1.col1, table1.col2, table1.SupplierID, 
       (SELECT Name
        FROM table2
        WHERE table2.ID = table1.SupplierID
        FETCH FIRST 1 ROW ONLY
       ) as SupplierName
FROM SIS_PRS table1;
Run Code Online (Sandbox Code Playgroud)

另请注意,在两个数据库中,获取一行不带ORDER BY是可疑的.

  • 在第一个示例中,您具有“ SELECT ID,SupplierName”,将(虚拟)表别名设置为“ Supp”,并使用“ Supp.ID,Supp.Supplier”选择了字段。这应该工作。但是在**第二个示例**中,通过相关子查询,您将子查询包括在SELECT中(其结果将是它返回的字段),但是您选择的是** 2个字段**(`SELECT ID ,名称),并将**结果字段**定义为`SupplierName`。它将如何工作(将返回两个字段中的哪个)?我想念什么吗? (2认同)
  • @LucasBasquerotto...接得好.那是一个错字. (2认同)