簡體   English   中英

僅從左關節中選擇一個 +mySQL

[英]SELECT just one FROM the LEFT JOINTs +mySQL

在我的 SQL 數據庫中得到以下表格(簡化版):

博客

+----+----------------------+----------+
| 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    |
+----+----------------------+----------+

表格圖片加入

+-------------+---------+---------------------+
|  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 將圖片與博客表“連接起來”。 現在我使用以下 SQL-Command 將這兩個表 (Blog - PictureJoin) / (PictureJoin - Pictures) 連接在一起。

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                   |
+------+----------------------+-----------+------------------------+

嘗試了幾個小時,但無法讓它工作。 請幫忙!

最簡單的方法可能是僅從 PicturesJoin 中為每個 IDBlog 選擇一個 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;
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;

試試上面的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM