sql - 如何在视图中使用左连接在查询中添加 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
解决方案
您需要使用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
推荐阅读
- storybook - 故事书组件库站点?
- go - 在golang中将字符串转换为日期
- javascript - JavaScript数组DFS,但搜索后总是回到根目录
- mysql - 通过对它们进行分组来获取重复的 Id
- c++ - 抽象类中的 C++ 迭代器参数
- c# - 在服务器上部署发布文件时“/”应用程序中的服务器错误
- javascript - 如何在库模块Android Studio中调用主应用程序模块功能
- javascript - 我试图在用户切换浏览器选项卡时暂停 html 中的视频,当返回该选项卡时,视频会从停止的位置自动重新播放
- iot - 如何在 Contiki OS 中运行代码以及模拟中的输出结果。结果说明
- javascript - div 包含 100% 的高度 CSS 未找到