2017-12-05 26 views
0

私は2つのテーブルを結合して、「写真」テーブルと「場所」テーブルを結合しています。それぞれの場所にはデフォルトの画像が関連付けられている場合とそうでない場合があり、そうであればその写真の名前を返すようにします。そうでない場合はnullを返します。各位置のデフォルト画像(存在する場合)は、常に「PictureSort」の値が1の画像です。2番目のテーブルから正しい値を返すMySQL JOIN

私の最初のSQLの試みから、WHEREステートメントを使用すると、 nullの場所(その場所の写真が存在しない場所)。

SELECT a.LocationID, a.LocationName, b.PictureSort, b.PictureName 
FROM Locations AS a 
LEFT JOIN Photos AS b ON a.LocationID = b.LocationID 
WHERE b.PictureSort = '1' 
GROUP BY a.LocationID 

私も言ってMySQLでMIN()関数を使用してみましたが、私にPictureSort列で最も低い値を示し、それはその列のために働く一方で、右隣もPictureNameの列には追随しません関連付けられた値をPictureSort列に返します。

SELECT a.LocationID, a.LocationName, MIN(b.PictureSort) AS PictureSort, b.PictureName 
FROM Locations AS a 
LEFT JOIN Photos AS b ON a.LocationID = b.LocationID 
GROUP BY a.LocationID 

何か助けていただければ幸いです。私はこれがうまくいくようにしたいと思いますが、これを実現させるために最も安価なクエリも探しています。

ありがとうございます!

答えて

1

left joinの場合、2番目のテーブルの条件はon句になります。

また、テーブルのエイリアスはテーブルの名前に関連する必要があります。そして、GROUP BYは必要ありません。したがって、これを試してみてください:

SELECT l.LocationID, l.LocationName, p.PictureSort, p.PictureName 
FROM Locations l LEFT JOIN 
    Photos p 
    ON p.LocationID = l.LocationID AND b.PictureSort = '1'; 

数字がPictureSortの場合は、一重引用符を削除してください。データ型を混在させないでください。

関連する問題