2017-02-22 2 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 JOINの代わりINNER 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