我想选择所有尚未包含在n:m类型的查询中的记录...
我有一张名为'artwork'的表格,如下所示:
artwork_id caption filename
---------------------------------------------------------------
1 Moonlight Front cover 3483490.jpg
2 Take it Inlay 2984560.jpg
3 Moonlight Front Cover (UK Release) gh893ed.jpg
4 CD .... 86re956.jpg
5 CD 3 ... 84wefg8.jpg
我有一个名为'album_artwork'的n:m表,如下所示:
album_id artwork_id position
-------------------------------
1 1 1
23 1 1
8 2 5
1 2 2
我有一个表单,允许用户选择相册的图稿,但我不希望用户重复输入...所以我想向用户显示剩余的图片......例如,对于id为1的相册,选择输入将显示以下选项
3 Moonlight Front Cover (UK Release)
4 CD ...
5 CD 3 ...
artwork_id 1和arts_id 2将不会成为选项的一部分,因为album_id 1的artwork_id条目已经存在于n:m album_artwork数据库中
我如何只选择其余的?
由于
答案 0 :(得分:1)
您可以使用NOT EXISTS
过滤artwork_id
中已存在的album_artwork
:
SELECT
a.*
FROM
artwork a
WHERE
NOT EXISTS (
/* NOT EXISTS subquery returns artwork_id's from album_artwork already present */
SELECT artwork_id FROM album_artwork aw
WHERE
album_id = $your_album_id
AND a.artwork_id = aw.artwork_id
)
SQLFiddle.com上的答案 1 :(得分:1)
您可以使用NOT IN
仅为已知artwork
选择不在已使用artwork
数组中的album
行。
SELECT
artwork_id,caption,filename
FROM
artwork
WHERE
artwork_id
NOT IN
(SELECT artwork_id FROM album_artwork WHERE album_id = $album_id)