2012-04-22 3 views
1

J'ai deux tables dans une base de données. L'un concerne les produits et l'autre les images de produits. Je rejoins les tables pour que je puisse obtenir les images de produits et d'informations avec une requête: cependant,Left Join Duplicate Column

SELECT * 
from items left join images 
    on items.item_id = images.item_id and 
     items.display_items = '1' and items.active = '1' 
order by items.item_year desc, items.fullname desc, images.position asc 

J'ai remarqué, que tous les produits ne s'affichaient pas. Certains produits n'ont aucune image et ce sont eux qui n'apparaissent pas. J'ai couru ma requête dans Sequel Pro et j'ai vu que la colonne item_id apparaissait deux fois, une fois avec l'identifiant et une fois comme NULL. Comment puis-je corriger ma requête pour obtenir tous les produits?

Répondre

2

Je voudrais réviser votre requête pour spécifier les colonnes exactes que vous voulez dans votre résultat plutôt que d'utiliser "select *". Dans ce cas, vous pouvez avoir des colonnes avec le même nom dans les 2 tables (comme "item_id"), ce qui peut causer des problèmes dans "select *".

Aussi, je prendrais la 2ème ligne de votre instruction ON et la mettrais dans une clause WHERE. Les éléments "items.display_items = '1' et items.active = '1'" ne s'appliquent pas à votre jointure, mais plutôt à l'ensemble d'éléments que vous voulez.

requête révisée:

SELECT --explicit list of columns 
from items 
    left join images 
    on items.item_id = images.item_id 
WHERE items.display_items = '1' and items.active = '1' 
order by items.item_year desc, items.fullname desc, images.position asc 
+0

Cela a fonctionné parfaitement. Le SELECT * était le problème. Merci! –

0

Vous manque une clause WHERE. En supposant que vous voulez seulement des données de items, essayez ceci:

SELECT it.* 
FROM items it 
LEFT JOIN images im 
ON it.item_id = im.item_id 
WHERE it.display_items = '1' and it.active = '1' 
ORDER BY it.item_year desc, it.fullname desc, im.position asc