2012-04-20 21 views
0

私はいくつかのSQLに苦労しているし、いくつかの助けを使用することができます。私はそれがかなりの初心者のものだと確信しています。ここで(MYSQL)SQL selectクエリ - おそらくOUTER JOIN?

は一例です: ALBUMIDが供給されたときに、私は、アルバムに含まれていないすべての画像を選択しようとしています。

テーブル

ピクチャーテーブル

pictureid 
    picturename 

albumpictureid 
    albumid 
    pictureid 

アルバム表

Album_Picture協会表 - 私は薄いありませんkこのテーブルはSQLで参照される必要があります。

albumid 
    albumname 

私はアルバムに画像を割り当てていて、既に割り当てられている画像を表示したいだけです。

エクストラクレジット:私が代わりに返されたデータからそれらを省略することで、テーブル内のすべての画像を選択し、すでにアルバムにであるものを知ることができることができればさらに良いでしょう何です。 それから私はまだ画像を表示して、それを割り当てられないようにすることができました。

すべてが意味をなさないことを望みます。 ありがとうございました。あなたの最初の質問について

答えて

1

MYSQL 5を使用して

、このクエリは、あなたのalbum_pictureアソシエーションテーブルの内側に関連がありません写真を返します。

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

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

(SELECT pictures.*, 'n' AS `assigned` ....) UNION (SELECT pictures.*, 'y' AS `assigned` ...) 
+0

David Z.ありがとう、私は最初のものを試してみました。それは勝った、既に割り当てられたものを返す。私はあなたの第二のものを本当に理解していませんが、今は幸せです。ありがとうございました! – gbroke

1

あなたは一緒に写真ないアルバムでを見つけることができます。これは、しようとすることで

select pictureid, albumid=:albumid as in_album from Album_Picture 
+0

私は前にその構文を見ていません。そこにいくつかのドキュメントへのリンクがありますか?かなり上品です。 –

+0

これはデータベースコネクタの構文の一部です。それは通常、標準よりも説明的ですか? PDOはこれを行います:http://php.net/manual/en/pdo.prepared-statements.php –

+0

ああ非常にクール、私はそれを見てみましょう:) –

0

レッツ・アプローチ:あなたがしてアルバムにものをマークすることができ

select pictureid from Album_Picture where albumid != :albumid 

各画像とその関連アルバムを表示する結果表を作成します。左外部結合のために、アルバムなしの写真はアルバム情報のためのヌル値を有する。 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