如何选择所选相册中的照片

时间:2014-03-24 07:09:04

标签: mysql

我无法弄清楚如何说出这个问题,所以我将使用一个典型的例子。想象一下,我有一个共同设计的相册有3个表 - 照片,相册,photo_albums(查找表)。专辑名称为A,B和C.

我如何找到A和C中的所有照片?

2 个答案:

答案 0 :(得分:1)

您首先在JOINalbums之间执行photo_albums并执行GROUP BY以查找相册A和C中的照片。然后加入此结果photos获得最终结果。

这样的事情:

SELECT p.*
FROM photos p
JOIN (
  SELECT pa.photoid
  FROM albums a
  JOIN photos_albums pa
  ON a.albumid = pa.albumid
  WHERE a.albumname IN ('A','C')
  GROUP BY pa.photoid
  HAVING COUNT(DISTINCT(pa.albumid)) = 2
) t
ON p.photoid = t.photoid

工作小提琴: http://sqlfiddle.com/#!2/187f36/20

答案 1 :(得分:1)

如果您的表格设计如下所示,并且您想要过滤相册名称。然后你可以这样做:

SELECT
    *
FROM
    photos
WHERE EXISTS
(
    SELECT
        NULL
    FROM
        photo_albums
        JOIN albums
            ON photo_albums.albumId=albums.albumId
    WHERE
        photos.photoId=photo_albums.photoId
        AND albums.albumName IN ('A','B')
)

我认为更好的解决方案是通过Id(如果你有的话)来做。像这样:

SELECT
    *
FROM
    photos
WHERE EXISTS
(
    SELECT
        NULL
    FROM
        photo_albums
    WHERE
        photos.photoId=photo_albums.photoId
        AND photo_albums.albumId IN (1,3)
)