2016-11-08 57 views
0

我想查詢。mysql連接查詢。但是,有些數據沒有加入數據

我究竟想要做的是〜

我有兩個表中的一個被稱爲model,另一種被稱爲model_image

我想如果存在數據從model_imagemodelimg_name選擇nonamemobile

select m.no, m.name, m.display_name, m.mobile, i.img_name 
from model as m 
left join model_image as i on m.no = i.model_no 
order by i.sort desc 
limit 1 

所以,我做了這個查詢,但我不知道我怎樣才能得到它不具有MODEL_IMAGE表中的任何數據資料的想法。

任何人都可以幫到我嗎?

謝謝〜

以下查詢作品謝謝〜

select m.no, m.name, m.display_name, m.mobile, IFNULL(i.img_name, '') AS img_name 
from model as m 
left join (
    SELECT a.model_no, a.img_name 
    FROM model_image AS a 
    JOIN (SELECT model_no, MAX(sort) AS maxsort 
      FROM model_image 
      GROUP BY model_no) AS b 
    ON a.model_no = b.model_no AND a.sort = b.maxsort) AS i 
on m.no = i.model_no 

enter image description here

+0

這應該通過以下方式實現的'左join'您使用。你確定你不會錯過它,因爲你只將結果限制在一行? – spiderman

+0

是的,我想獲得模型信息和只有一個模型圖像這是最高的排序數字。每個模型有很多圖片,但我只想顯示首頁只有一張圖片和名稱..所以我寫下了限制1. –

+0

'LIMIT'子句適用於整個查詢,而不是每個模型1行。 – Barmar

回答

1

如果要獲得每個模型的最高分類圖像,則需要在子查詢,並加入model表。

select m.no, m.name, m.display_name, m.mobile, IFNULL(i.img_name, '') AS img_name 
from model as m 
left join (
    SELECT a.model_no, a.img_name 
    FROM model_image AS a 
    JOIN (SELECT model_no, MAX(sort) AS maxsort 
      FROM model_image 
      GROUP BY model_no) AS b 
    ON a.model_no = b.model_no AND a.sort = b.maxsort) AS i 
on m.no = i.model_no 

有關子查詢的解釋,請參閱SQL Select only rows with Max Value on a Column

+0

怎麼......我沒想到它......^_ ^你是最好的謝謝! –

1

您正在使用left join,這是正確的,會給你從哪個model沒有相應結果行model_image

但是,你從T列進行排序它他第二張桌子。在左連接中,只出現在第一個表上的每一行將在第二個表的所有列上得到null
因此,沒有圖像的所有行都將具有空值作爲排序列。因此,由於您將結果限制爲1,因此不會得到結果集底部的空值。

+0

謝謝你的回答。那麼有沒有辦法輸入「或m.no = null」? –