首页 > 解决方案 > 如何在视图中使用左连接在查询中添加 TOP 1?

问题描述

我在 ID=42 中有 3 个相同的产品,有 3 个不同的图像。我想从产品 ID 中获取第一张图片,我尝试添加“TOP 1”,错误

这是我的查询

CREATE OR REPLACE VIEW UserOrdersView
AS 
SELECT 
    u.[User_ID],
    p.Product_Name,
    p.Price, 
    o.Order_Price, 
    o.Order_ID, 
    i.[Image]
FROM Product p
LEFT JOIN Orders o ON o.Product_ID = p.Product_ID
INNER JOIN Users u ON u.[User_ID]= o.[User_ID]
LEFT JOIN Product_Images  i ON i.Product_ID = p.Product_ID
WHERE o.[User_ID] = 42

标签: sqlsql-serverdbeaver

解决方案


您需要使用OUTER APPLY基于Product ID.

请查看这个现实生活示例,何时在 SQL stackoverflow 链接中使用 OUTER / CROSS APPLY 以获得更多知识。

请检查下面更新的视图代码以获得您的答案。

CREATE OR REPLACE VIEW UserOrdersView
AS 
BEGIN

    SELECT 
        u.[User_ID],
        p.Product_Name,
        p.Price, 
        o.Order_Price, 
        o.Order_ID, 
        i.[Image]
    FROM Product p
    INNER JOIN Users u ON u.[User_ID]= o.[User_ID]
    LEFT JOIN Orders o ON o.Product_ID = p.Product_ID
    OUTER APPLY 
    (
        SELECT TOP 1            
            T2.[Image]
        FROM Product_Images T2
        WHERE T2.Product_ID = p.Product_ID
    ) i
    WHERE o.[User_ID] = 42

END
GO

推荐阅读