sql-server - PostgreSQL 中外部应用的等效语法是什么

标签 sql-server postgresql lateral-join

<分区>

我试图找到一个关于 OUTER APPLY 从 MSSQL 到 PostgreSQL 的等效用法的 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

最佳答案

这是一个横向连接:

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 的行是可疑的。

关于sql-server - PostgreSQL 中外部应用的等效语法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47925994/

相关文章:

c# - 超时/结束日期事件的解决方案

sql-server - 为什么 DELETE TOP(X) 语句不删除先前 SELECT TOP(X) 返回的相同记录?

Postgresql 查询 : schema does not exist

sql - 在具有 UNION 的查询中使用 OVER()

sql-server - sql server : Unique constraint generates unique key and unique index

python - 在 Cloud Functions 中使用 Cloud SQL (Postgres)

sql - 将 INSERT...RETURNING 的返回值保存到临时表 (PostgreSQL)

sql - LEFT JOIN 匹配。如果没有匹配,需要在最近的日期匹配

sql - PostgreSQL 中的 LATERAL JOIN 和子查询有什么区别?

MySQL - 如何将列转为行?