0

我有一个查询,左连接部分应该返回数据或 null。但即使有现有记录,它也不会返回任何数据。左连接部分的转折是我只想检索一条记录(如果存在)。谢谢你的帮助。

select a.*,p.thumbnailphotopath as AlbumPicture 
from (select * from album_access) ac
inner join (select * from albums) a on a.ID = ac.AlbumID
left join (
    select * from photos 
    where IsProcessed = 1 order by DateUploaded desc limit 1
) p 
on a.ID = p.AlbumID #should return one if exist.
where ac.AccessUserID = '35e44a8e-643a-4c4f-8a46-59911a1e7c53' 
  and ac.FullControl = 1 and a.Private = 1
4

1 回答 1

2

首先,您可以只加入一个表名,而不需要加入整个 SELECT * FROM 语句。

其次,您应该尽量不要使用 SELECT * 而是选择您想要的列。

但我认为您的 LEFT JOIN 的问题在于您正在加入一个只会返回一个结果的子查询,这将是最后上传的照片中的条目,无论它属于哪个专辑 ID。如果您希望在照片中输入每行的最后上传日期,请尝试这样的操作

SELECT a.*,p.thumbnailphotopath AS AlbumPicture 
FROM album_access ac
INNER JOIN albums a ON a.ID = ac.AlbumID
LEFT JOIN (
    SELECT albumID,MAX(DateUploaded) FROM photos 
    WHERE IsProcessed = 1 GROUP BY albumID
) p ON a.ID = p.AlbumID #should return one if exist.
WHERE ac.AccessUserID = '35e44a8e-643a-4c4f-8a46-59911a1e7c53' 
  AND ac.FullControl = 1 
  AND a.Private = 1
于 2012-04-19T18:51:13.627 回答