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 ...

album_id 1のartwork_idエントリはn:m album_artworkデータベースにすでに存在するため、artwork_id1とartwork_id2は選択オプションの一部にはなりません。

残りのものだけを選択するにはどうすればよいですか?

ありがとう

4

2 に答える 2

1

を使用して、 :にすでに存在するものNOT EXISTSをフィルタリングできます。artwork_idalbum_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のみを選択できます。artworkartworkalbum

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 に答える