我无法弄清楚如何说出这个问题,所以我将使用一个典型的例子。想象一下,我有一个共同设计的相册有3个表 - 照片,相册,photo_albums(查找表)。专辑名称为A,B和C.
我如何找到A和C中的所有照片?
答案 0 :(得分:1)
您首先在JOIN
和albums
之间执行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
答案 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)
)