2011-11-10 43 views
1

如何選擇多個表並從同一列中連接多行?SQL - 如何選擇多個表並從同一列中連接多行?

它不返回painting.id_group,painting.id_typepainting.id_location。 我確定這個SQL代碼片段的語法錯誤。

SELECT painting.id, painting.order, painting_en.url, id_portfolio.en 
FROM painting 
LEFT JOIN painting_en 
USING (id) 
LEFT JOIN id_portfolio ON id_portfolio.id = painting.id_group 
AND id_portfolio.id = painting.id_type 
AND id_portfolio.id = painting.id_location 
WHERE painting_en.url='2011-name3' 
LIMIT 1 

更新: 它顯示Showing rows 0 - 0 (1 total, Query took 0.0004 sec)。 去除

AND id_portfolio.id = painting.id_type 
AND id_portfolio.id = painting.id_location 

後返回:

id  | order | url  |en 
----------+-------+------------+----- 
09518709 | 4  | 2011-name3 | NULL 

,但我需要返回:

id  | order | url  | group | type   | location 
----------+-------+------------+---------+---------------+--------- 
09518709 | 4  | 2011-name3 | realism | oil on canvas | US 
+0

你是什麼意味着它不會返回它們?網格只返回1列嗎? –

+0

我更新了我的問題與SQL結果和預期的結果。 – Binyamin

回答

1

你可以加入到同一個表多次,你只需要給不同的別名

SELECT painting.id, 
     painting.order, 
     painting_en.url, 
     `group`.en AS `group`, 
     TYPE.en AS type, 
     location.en AS location 
FROM painting 
     LEFT JOIN painting_en 
     USING (id) 
     LEFT JOIN id_portfolio `group` 
     ON `group`.id = painting.id_group 
     LEFT JOIN id_portfolio TYPE 
     ON TYPE.id = painting.id_type 
     LEFT JOIN id_portfolio location 
     ON location.id = painting.id_location 
WHERE painting_en.url = '2011-name3' 
LIMIT 1 
+0

MySQL返回錯誤*#1054 - '字段列表'*中的未知列'id_portfolio.en',用於'SELECT painting.id,painting.order,painting_en.url,id_portfolio.en AS'group',id_portfolio.en AS'type ',id_portfolio.en AS位置 從繪畫 左連接painting_en USING(ID) LEFT JOIN id_portfolio '基團' ON id_portfolio.id = painting.id_group LEFT JOIN id_portfolio '類型' ON id_portfolio.id = painting.id_type LEFT JOIN id_portfolio location ON id_portfolio.id = painting.id_location WHERE painting_en.url ='2011-name3' LIMIT 1' – Binyamin

+0

這是因爲您需要在SELECT子句中使用表別名而不是實際的表名 –

+0

您的SQL必須工作正常。 MySQL在*#1054之前返回了我 - 因爲在db中丟失了一些列,導致'field list'*中的未知列'id_portfolio.en'。現在已修好。同樣爲了更好的表現 - 如果沒有這樣的需求,不要使用「左」和「右」。 – Binyamin