我正在努力使用一些sql并且可以使用一些帮助。我相信这对很多人来说都是新手。
以下是一个例子: 当我们提供专辑时,我正试图选择所有不在专辑中的图片。
表格
图片表
pictureid
picturename
Album_Picture关联表
albumpictureid
albumid
pictureid
相册表 - 我认为不需要在SQL中引用此表。
albumid
albumname
我正在为相册分配照片,并且只想显示尚未分配的照片。
额外信用:如果我可以选择表格中的所有图片并且能够知道相册中已有哪些图片,而不是从返回的数据中省略它们,那会更好。 然后我仍然可以显示图像而不允许它被分配。
希望一切都有道理。 谢谢你的帮助。
使用MYSQL 5
答案 0 :(得分:1)
对于您的第一个问题,此查询将返回您album_picture
关联表中没有关联的图片。
SELECT
*
FROM
pictures
WHERE
pictureid NOT IN (SELECT pictureid FROM album_picture)
返回两者的一种简单方法是添加另一列,执行两个查询(一个用于为您提供已分配的图片,另一个用于为您提供未分配的图片),并获得两者的并集。
(SELECT pictures.*, 'n' AS `assigned` .... ) UNION (SELECT pictures.*, 'y' AS `assigned` ...)
答案 1 :(得分:1)
您可以在相册中找到不的图片:
select pictureid from Album_Picture where albumid != :albumid
您可以使用以下标记标记相册中的内容:
select pictureid, albumid=:albumid as in_album from Album_Picture
答案 2 :(得分:0)
让我们通过尝试创建一个显示每张图片及其相关相册的结果表来解决这个问题。由于左外连接,没有相册的图片将具有相册信息的空值。 ORDER BY语句将所有空值放在一起。
select p.pictureid, p.picturename, a.albumid, a.albumname
from picture p
left outer join album_picture ap
on p.pictureid = ap.pictureid
left outer join album a
on ap.albumid = a.albumid
order by a.albumid