0

我正在为一些 sql 苦苦挣扎,可以使用一些帮助。我相信这对很多人来说都是新手。

这是一个示例: 当提供了albuid 时,我正在尝试选择不在相册中的所有图片。

桌子

图片表

    pictureid
    picturename

相册_图片关联表

    albumpictureid
    albumid
    pictureid

专辑表- 我认为不需要在 SQL 中引用此表。

    albumid
    albumname

我正在为相册分配图片,并且只想显示尚未分配的图片。

额外的功劳:如果我可以选择表中的所有图片并且能够知道哪些图片已经在相册中,而不是从返回的数据中忽略它们,那就更好了。然后我仍然可以显示图像,只是不允许分配它。

希望一切都说得通。感谢您的任何帮助。

使用 MYSQL 5

4

3 回答 3

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` ...)
于 2012-04-20T03:12:17.550 回答
1

您可以通过以下方式找到不在相册中的图片:

select pictureid from Album_Picture where albumid != :albumid

您可以使用以下方式标记相册中的内容:

select pictureid, albumid=:albumid as in_album from Album_Picture 
于 2012-04-20T03:13:07.440 回答
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
于 2012-04-20T03:15:10.547 回答