sql - 如何在 SQL 中使用带有左连接的 Select top 1 子查询

标签 sql sql-server

我正在尝试执行此查询,但它不起作用。请帮助我解决此问题我想从带有左连接的子查询中针对相关帖子选择前 1 张图像

SELECT DISTINCT tblAdvertisement.AdvID, 
                tblAdvertisement.CityName, 
                tblAdvertisement.Model, 
                tblAdvertisement.Year, 
                tblAdvertisement.Mileage, 
                tblAdvertisement.imgPath, 
                tblAdvertisement.Price, 
                tblAdvertisement.VoteScore, 
                tblLike.isLike 
FROM            tblAdvertisement 
LEFT JOIN       tblimg 
                ( 
                       SELECT TOP 1 
                              ImgPath 
                       FROM   tblimg ) AS 
ON              tblAdvertisement.AdvID = tblimg.AdvID 
LEFT JOIN       tblLike 
ON              tblAdvertisement.AdvID = tblLike.AdvID 
AND             tblAdvertisement.UserID = @userID 
ORDER BY        AdvID DESC

最佳答案

您需要使用OUTER APPLY:

SELECT DISTINCT A.AdvID, 
                A.CityName, 
                A.Model, 
                A.Year, 
                A.Mileage, 
                I.imgPath, 
                A.Price, 
                A.VoteScore, 
                L.isLike 
FROM            tblAdvertisement A
OUTER APPLY     ( SELECT TOP 1 
                              ImgPath 
                  FROM   tblimg
                  WHERE  AdvID = A.AdvID
                  ORDER BY SomeColumnToOrderBy) I
LEFT JOIN       tblLike L
ON              A.AdvID = L.AdvID 
AND             A.UserID = @userID 
ORDER BY        A.AdvID DESC;

请注意,如果您需要 TOP 1 图片,您应该执行 ORDER BY,否则您会得到一些任意行,而不是您实际需要的行想要。

关于sql - 如何在 SQL 中使用带有左连接的 Select top 1 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275540/

相关文章:

MySQL 使用来自另一个表的信息更新一个表

mysql - SQL 从第一个表返回行,然后分别连接表

mysql - 是否可以使用列值 sql 查询作为条件

sql-server - SQL CONSTRAINT 不同的名称

sql - SSMS 语法荧光笔支持超前和滞后

c# - 群集感知客户端应用程序(到 SQL Server)

sql - 将包含一些字符串的 varchar 转换为 informix 中的整数字段

允许多个和重复标签的mysql标签系统

c# - 使用 jQuery 将 byte[] 渲染为图像

sql - 使用一个表中的不同记录将其与其他表的不同条目组合