データベース:MS SQL 2008
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID
FROM Listing INNER JOIN Pictures ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID) FROM Pictures WHERE (ListingID = Listing.ID)))
問題は、画像のない「リスト」がいくつかあり、このSQLスクリプトのために表示されないことです。どうすればそれらを表示できますか?
値がnullの場合、Pictures.Picture列に "default.jpg"の値を与えますか?私はこれにかなり迷っているので、誰かが助けてくれれば、それは素晴らしいことです。質問の質が悪い場合は申し訳ありませんが、どうすればよいのかを本当に尋ねる方法がわかりません。しかし、詳細を尋ねると私はそれらを投稿します。
各リストには、ユーザーが望む数の写真を含めることができます。写真がなくてもリストを表示するには、このスクリプトが必要です。
フェーズ2
皆さん、ありがとうございました。これまでのところ、私は存在すら知らなかったいくつかの新しいコマンドを学んでいます。現在の問題は、リストに含まれる各写真の行を返すことです。しかし、デフォルトの画像はうまく機能しています。
SELECT Listing.Title, Listing.MLS, coalesce(Pictures.PictureTH, '../default_th.jpg') as PictureTH, coalesce(Pictures.Picture, '../default.jpg') as Picture, Listing.ID FROM Listing LEFT
OUTER JOIN Pictures ON Listing.ID = Pictures.ListingID
リストIDごとに1行しか返さないようにするにはどうすればよいですか?
2つのこと:
left outer join
の代わりに inner join
写真がない場合でも、すべてのリストを取得します。coalesce
を使用してデフォルトを適用します
SELECT Listing.Title
, Listing.MLS
, Pictures.PictureTH
, coalesce(Pictures.Picture, 'default.jpg') as Picture
, Listing.ID
FROM Listing
LEFT OUTER JOIN Pictures
ON Listing.ID = Pictures.ListingID
[〜#〜] edit [〜#〜] 1行に制限するには:
SELECT Listing.Title
, Listing.MLS
, Pictures.PictureTH
, coalesce(Pictures.Picture, 'default.jpg') as Picture
, Listing.ID
FROM Listing
LEFT OUTER JOIN Pictures
ON Listing.ID = Pictures.ListingID
WHERE Pictures.ID is null
OR Pictures.ID = (SELECT MIN(ID)
FROM Pictures
WHERE (ListingID = Listing.ID)))
picがnullの場合にデフォルト値を設定する場合は、COALESCEキーワードを使用してこれを実行できます。
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH,
COALESCE (Pictures.Picture, 'default.jpg') AS Pictures, Listing.ID
FROM Listing LEFT JOIN Pictures
ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID)
FROM Pictures WHERE (ListingID = Listing.ID)))
以下のようにIsNullでこれを実現することもできます。
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH,
ISNULL(Pictures.Picture, 'default.jpg') AS Pictures, Listing.ID
FROM Listing LEFT JOIN Pictures
ON Listing.ID = Pictures.ListingID
WHERE (Pictures.ID = (SELECT MIN(ID)
FROM Pictures WHERE (ListingID = Listing.ID)))
こちら IsNullとCoalesceについて読むことができます
_left outer join
_の代わりに_inner join
_を使用します
_Inner join
_は、結合を満たす結果がある場合にのみ結果を返します。
_Left outer join
_はleftサイドテーブルから結果を返し、結合が満たされる場合はrightサイドテーブルからも結果を追加します。
non-satisfying結合から返されたnull値を変換する必要がある場合は、coalesce(Pictures.Picture, 'default.jpg')
のようなcoalesce
関数を使用します
左結合を行う必要があります
SELECT Listing.Title, Listing.MLS, Pictures.PictureTH, Pictures.Picture, Listing.ID
FROM Listing LEFT JOIN Pictures ON Listing.ID = Pictures.ListingID
地雷、どのデータベースを使用していますか?
SQL Server 2005以降またはOracleの場合、pivotコマンドを使用してこれを実現できます。