2017-02-22 70 views
0

我當前的查詢是:的MySQL查詢

select 
    item_description.fk_i_item_id, item_description.s_title, item_description.s_description, 
    category_description.s_slug, 
    item_resource.s_path, item_resource.s_extension, item_resource.pk_i_id 
FROM 
    item, item_description, category_description, item_resource 

WHERE 
    item.pk_i_id = item_description.fk_i_item_id 
AND 
    category_description.fk_i_category_id = 96 
AND 
    item.pk_i_id = item_resource.fk_i_item_id 

GROUP BY item.pk_i_id 
ORDER BY item.pk_i_id DESC 

基本上這些表存儲了一些項目的信息(存儲在item_resource可選的信息),我米試圖從所有這些4個表得到的所有有用的信息,它的工作好當項目具有資源(在item_resource可選的信息),但如果該項目不具備的資源,那麼該項目將不會出現結果。

所以我需要在項目被退回過,無論它是否對item_resource表或沒有信息的結果。

回答

1

所以我需要一個結果,其中該項目返回太多,無論它是否有關於item_resource表的 信息。

然後考慮做OUTER JOIN和最有可能代替LEFT OUTER JOININNER JOIN。目前什麼您正在執行是內連接,當你說FROM item, item_description, category_description, item_resource是一箇舊式連接語法。您應該考慮使用ANSI風格JOIN語法,而。

而且,看不出有什麼需要的是GROUP BY item.pk_i_id,因爲你沒有執行任何聚集。

我的意思是這樣如下:

select 
    item_description.fk_i_item_id, item_description.s_title, 
    item_description.s_description, 
    category_description.s_slug, 
    item_resource.s_path, item_resource.s_extension, item_resource.pk_i_id 
FROM 
    item 
LEFT JOIN item_description ON item.pk_i_id = item_description.fk_i_item_id 
LEFT JOIN category_description ON category_description.some_column = item.pk_i_id 
AND category_description.fk_i_category_id = 96 
LEFT JOIN item_resource ON item.pk_i_id = item_resource.fk_i_item_id 
ORDER BY item.pk_i_id DESC; 
+0

是必須的「GROUP BY item.pk_i_id」因爲有時候比資源更多,所以在這種情況下,該條目被複制。添加GROUP BY就像一個魅力。謝謝 – Saymon