すべて私のデータベースに登録されたのアカウントは、自分の「プロフィール」画像と「カバー」画像(facebookスタイル)の画像ファイルパスで登録されています。イメージファイルパスは、別のテーブルのaccount
テーブルに格納されます。異なるテーブルの複数の行を1つの行に結合するにはどうすればよいですか?
SELECT
a1.AccountID,
a1.Forename,
a1.Surname,
img1.Filename AS ProfileImg,
img2.Filename AS CoverImg
FROM
dbo.Account a1
LEFT JOIN
dbo.AccountImage img1 ON --table with images in
img1.AccountID = a1.AccountID AND ProfileImg = 1 --boolean column to mark it as profile pic
LEFT JOIN
dbo.AccountImage img2 ON --table with images in
img2.AccountID = a1.AccountID and CoverImg = 1 --boolean column to flag as cover pic
アカウントテーブル:
AccountID | Forename | Surname |
12345 | Ben | Hur |
12346 | Frodo | Baggins |
12349 | Bill | Gates |
AccountImageテーブル:
AccountID | Filename | ProfileImg | CoverImg
12345 | face.jpg | True | NULL
12345 | bg.jpg | NULL | True
12346 | graph.png | NULL | NULL
12349 | sunset.jpg | NULL | True
これは、現在返されます
|AccountID|Forename|Surname|ProfileImg|CoverImg |
| 12345| Ben| Hur|NULL |bg.jpg |
| 12345| Ben| Hur|face.jpg |NULL |
012を
私のコードは次のようです
結果、私はちょうど、それぞれ自分のアカウントの詳細と画像のパスの両方を含む各AccountID
のための単一の行を返したい
|AccountID|Forename|Surname|ProfileImg|CoverImg |
| 12345| Ben| Hur|face.jpg |bg.jpg |
を必要とする(アカウントの何百もあります)。そうでなければ、私は重複した行に終わります - 一つはProfileImg
ファイルパスを含み、もう一つはCoverImg
ファイルパスを含みます。
ちょうど注意してください - プロフィールやカバー写真がない可能性があります。どちらの列もNULL
になることを意味します。
MAX(img1.Filename)、MAX(img2.Filename)、グループ化してもらえますか? – Veljko89
動作するかどうかわかりませんが、 'GROUP BY'を試しましたか? –
AccountID、Forenameと姓が同じであれば、グループ作業は – Veljko89