(MYSQL)SQL选择查询 - 也许是OUTER JOIN?

时间:2012-04-20 03:09:07

标签: mysql sql select

我正在努力使用一些sql并且可以使用一些帮助。我相信这对很多人来说都是新手。

以下是一个例子: 当我们提供专辑时,我正试图选择所有不在专辑中的图片。

表格

图片表

    pictureid
    picturename

Album_Picture关联表

    albumpictureid
    albumid
    pictureid

相册表 - 我认为不需要在SQL中引用此表。

    albumid
    albumname

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

额外信用:如果我可以选择表格中的所有图片并且能够知道相册中已有哪些图片,而不是从返回的数据中省略它们,那会更好。 然后我仍然可以显示图像而不允许它被分配。

希望一切都有道理。 谢谢你的帮助。

使用MYSQL 5

3 个答案:

答案 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