簡體   English   中英

MySQL INNER JOIN查詢中存在子查詢問題

[英]Having issue with MySQL INNER JOIN query having sub-query in it

我有兩個表,類別和圖像。 這里,Category.ID == Images.Category

類別

-----------------------
| ID | parent | name  |
-----------------------
| 1  | 1      | foo   |
| 2  | 1      | bar   |
| 3  | 2      | lorem |
-----------------------

圖片

--------------------------------------
| ID  | category    | url            |
--------------------------------------
| 1   | 1           | foo.jpg        |
| 2   | 2           | bar.jpg        |
| 3   | 1           | foo2.jpg       |
--------------------------------------

我試過MySQL Query

SELECT *
FROM `category`
INNER JOIN
(SELECT MAX(ID) , url, category FROM `images` GROUP BY `category`)
AS a ON category.ID = a.category
WHERE `parent` = '1'

結果如何

-------------------------------------------
| ID | parent | name  | url     | max(ID) |
-------------------------------------------
| 1  | 1      | foo   | foo.jpg | 3       |
| 2  | 1      | bar   | bar.jpg | 2       |
-------------------------------------------

問題是

我想在這里添加最后一行的url,但是在第一行中,而不是url = foo2.jpg和max(ID)= 3,它會產生foo.jpg。 我無法弄清楚查詢中的問題。

我使用max(ID)獲取最后一行,它為max(ID)提供了正確的最后一行,但沒有給出合適的url列。

試試這個:

SELECT *
FROM `category`   AS c
INNER JOIN images AS i ON i.category = c.id
INNER JOIN
(
    SELECT  category, MAX(ID) AS MAXId
    FROM `images` 
    GROUP BY `category`
)AS a  ON i.category = a.category
      AND i.ID       = a.MaxID
WHERE c.`parent` = '1';

SQL小提琴演示

問題是,您在子查詢中是GROUP BY category ,並選擇MAX(ID) , url, category ,它們不包含在聚合函數中,也不包含在GROUP BY子句中,因此MySQL會為這些列選取任意值。 這就是為什么你得到一致的結果。

要解決這個問題,請正常JOIN兩個表categoryimages ,然后在表格images和子查詢之間添加一個額外的連接,該子查詢使用GROUP BY category為相同的表格images計算MAX(id) 然后將此子查詢與連接條件上的表images連接起來,即max id =原始id

這將只為您提供最后一個id圖像詳細信息。

以較短的方式

SELECT c.id,c.parent,c.name, MAX(c.ID) , url, category
    FROM `category` c
    INNER JOIN Images i on c.id=i.id and 
     c.id=(select max(id) from category)

我認為這個查詢對你有用..用sql小提琴...用這個鏈接。 http://sqlfiddle.com/#!2/5fe63/36

讓我知道如果解決了

暫無
暫無

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

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