2017-06-29 8 views
0

ガット以下の表:SELECT一つだけのmySQL + LEFTジョイントFROM

ブログ

+----+----------------------+----------+ 
| ID |   Date   | TitleGer | 
+----+----------------------+----------+ 
| 1 | 2017-04-28 15:09:46 | Huhu  | 
| 2 | 2017-04-28 15:16:18 | Miau  | 
| 3 | 2017-04-28 15:17:14 | Kleff | 
+----+----------------------+----------+ 

PicturesJoin

+-------------+---------+---------------------+ 
| IDPicture | IDBlog |  Date   | 
+-------------+---------+---------------------+ 
|   86 |  1 | 2017-06-28 17:41:11 | 
|   87 |  1 | 2017-06-28 17:41:11 | 
+-------------+---------+---------------------+ 

ピクチャ

+------+-------------------------+---------------------+ 
| ID |  Filename   |  Date   | 
+------+-------------------------+---------------------+ 
| 86 | 20170512200326_320.jpg | 2017-05-12 20:03:26 | 
| 87 | 20170512200326_384.jpg | 2017-05-12 20:03:30 | 
+------+-------------------------+---------------------+ 

PictureJoinは画像をブログテーブルに「結合」します。今私はこれらの2つのテーブル(Blog - PictureJoin)/(PictureJoin - Pictures)を一緒に結合するためにSQLコマンドを使用します。

SELECT 
    Blogs.ID, 
    Blogs.Date, 
    TitleGer, 
    Pictures.Filename 
FROM 
    Blogs 
LEFT JOIN 
    PicturesJoin ON PicturesJoin.IDBlog = Blogs.ID 
LEFT JOIN 
    Pictures ON Pictures.ID = PicturesJoin.IDPicture 
ORDER BY 
    DATE DESC 

結果は次のようになります。

+------+----------------------+-----------+------------------------+ 
| ID |  Date   | TitleGer |  Filename   | 
+------+----------------------+-----------+------------------------+ 
| 1 | 2017-06-28 15:09:46 | Huhu  | 20170512200326_320.jpg | 
| 1 | 2017-06-28 15:09:46 | Huhu  | 20170512200326_384.jpg | 
| 2 | 2017-04-28 15:16:18 | Miau  | NULL     | 
| 3 | 2017-04-28 15:17:14 | Kleff  | NULL     | 
+------+----------------------+-----------+------------------------+ 

彼はまた、論理的で利用できる写真のうち、クロス製品を作ります。しかし、私は彼が見つけた最初の写真を使うだけでいい。最終的には次のようになります。

+------+----------------------+-----------+------------------------+ 
| ID |  Date   | TitleGer |  Filename   | 
+------+----------------------+-----------+------------------------+ 
| 1 | 2017-06-28 15:09:46 | Huhu  | 20170512200326_320.jpg | 
| 2 | 2017-04-28 15:16:18 | Miau  | NULL     | 
| 3 | 2017-04-28 15:17:14 | Kleff  | NULL     | 
+------+----------------------+-----------+------------------------+ 

数時間は試してみましたが、動作しませんでした。助けてください!

+2

「最初に見つけた画像」はどのように定義しますか? – Blank

+2

あなたは名前をつけている方針は嫌いです – Strawberry

+0

ええ、私は知っている...:D –

答えて

1

最も簡単な方法はPicturesJoinからIDBlogにつき1 IDPictureを選択することがあります

SELECT 
    b.ID, 
    b.Date, 
    b.TitleGer, 
    p.Filename 
FROM Blogs b 
LEFT JOIN 
(
    SELECT 
    IDBlog, 
    MIN(IDPicture) AS IDPicture 
    FROM PicturesJoin 
    GROUP BY IDBlog 
) pj ON pj.IDBlog = b.ID 
LEFT JOIN Pictures p ON p.ID = pj.IDPicture 
ORDER BY b.Date DESC; 
+0

ありがとう!驚くばかり! –

0
SELECT b.ID,b.Date,b.TitleGer,p.Filename 
FROM Blogs b 
LEFT JOIN 
(
    SELECT main_table.* 
    FROM PicturesJoin main_table LEFT JOIN PicturesJoin child_table 
    ON (main_table.IDBlog= child_table.IDBlog AND main_table.IDPicture> child_table.IDPicture) 
    WHERE child_table.id IS NULL 
) 
OUTER_TABLE ON OUTER_TABLE .IDBlog = b.ID 
LEFT JOIN Pictures p ON p.ID = pj.IDPicture 
ORDER BY b.Date DESC; 

は、クエリの上に試してみてください。

希望すると、これが役立ちます。

+0

コードを実行しようとしましたが、 "#1146 - テーブル 'DB1.IDPicture'が存在しません"というエラーが発生します。それを解決しようとしましたが、私はあなたのコードを理解していません^^(これは奇跡ではありません。なぜなら、私はSQL-Selectionsで本当にうまくいないからです) –

+0

@BennyH。更新したものを試してください。 –

+0

ここでは、 "#句"に "#1054 - 不明な列 'child_table.id'がスローされます。私は混乱の原因になる私の狂気の名前のためにそのheheと思うhehe –