0

私はいくつかのSQLに苦労していて、いくつかの助けを使うことができます。多くの人にとって、それはかなり初心者のものだと確信しています。

次に例を示し ます。albumidが提供されているときに、アルバムに含まれていないすべての画像を選択しようとしています。

テーブル

ピクチャーテーブル

    pictureid
    picturename

Album_Pictureアソシエーションテーブル

    albumpictureid
    albumid
    pictureid

アルバムテーブル-このテーブルをSQLで参照する必要はないと思います。

    albumid
    albumname

アルバムに画像を割り当てていますが、まだ割り当てられていない画像だけを表示したいと思います。

追加のクレジット:さらに良いのは、返されたデータからそれらを省略するのではなく、テーブル内のすべての写真を選択して、アルバムにすでに含まれている写真を知ることができればです。それでも画像を表示して、割り当てを許可しないようにすることができます。

すべてが理にかなっていることを願っています。助けてくれてありがとう。

MYSQL5を使用する

4

3 に答える 3

1

album_picture最初の質問では、このクエリは、関連付けテーブル内に関連付けがない画像を返します。

  SELECT 
    * 
  FROM 
    pictures 
  WHERE 
    pictureid NOT IN (SELECT pictureid FROM album_picture)

両方を返す簡単な方法は、別の列を追加し、2つのクエリ(1つは割り当てられた画像を提供し、もう1つは割り当てられていない画像を提供する)を実行し、両方の和集合を取得することです。

  (SELECT pictures.*, 'n' AS `assigned` .... ) UNION (SELECT pictures.*, 'y' AS `assigned` ...)
于 2012-04-20T03:12:17.550 に答える
1

アルバムにない写真は次のように見つけることができます。

select pictureid from Album_Picture where albumid != :albumid

アルバム内のものに次のマークを付けることができます。

select pictureid, albumid=:albumid as in_album from Album_Picture 
于 2012-04-20T03:13:07.440 に答える
0

各写真とそれに関連するアルバムを示す結果テーブルを作成して、これにアプローチしましょう。左側の外部結合により、アルバムのない画像のアルバム情報の値はnullになります。ORDER BYステートメントは、すべてのnullをまとめます。

select p.pictureid, p.picturename, a.albumid, a.albumname
from picture p
    left outer join album_picture ap
    on p.pictureid = ap.pictureid
        left outer join album a
        on ap.albumid = a.albumid
order by a.albumid
于 2012-04-20T03:15:10.547 に答える