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

时间:2017-12-21 13:26:34

标签: 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

1 个答案:

答案 0 :(得分:7)

这是横向连接:

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;

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

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;

另请注意,在两个数据库中,提取没有ORDER BY的行是可疑的。