0

我想选择所有不在 an:m 类型查询中的记录...

我有一张像这样的名为“艺术品”的桌子:

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”的: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 ...

artifact_id 1 和和artifacts_id 2 不会成为选择选项的一部分,因为album_id 1 的artifact_id 条目已经存在于n:m album_artwork 数据库中

我如何只选择其余的?

谢谢

4

2 回答 2

1

您可以使用 aNOT 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 上的演示

于 2012-11-30T22:38:11.637 回答
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)

sqlfiddle 示例

于 2012-11-30T22:50:04.987 回答