2012-04-22 6 views
1

У меня есть две таблицы в базе данных. Один для продуктов, а другой для изображений продуктов. Я присоединяюсь к таблицам, так что я могу получить изображения продукта и данные с одного запроса: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 

Я заметил, однако, что все продукты, не обнаруживались. Некоторые из продуктов не имеют никаких изображений, и те не появлялись. Я выполнил свой запрос в Sequel Pro и увидел, что столбец item_id появлялся дважды, один раз с идентификатором и один раз как NULL. Как я могу исправить свой запрос, чтобы получить все продукты?

ответ

2

Я бы пересмотрел ваш запрос, чтобы указать точные столбцы в результатах, а не использовать «select *». В этом случае вы можете иметь столбцы с тем же именем в двух таблицах (например, «item_id»), и это может вызвать проблемы в «select *».

Кроме того, я бы взял вторую строку вашего оператора ON и поместил его в предложение WHERE. «Items.display_items = '1» и items.active =' 1 '"не относятся к вашему соединению, а относятся к набору элементов, которые вы хотите.

Пересмотренный запрос:

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

Это сработало отлично. Проблема SELECT *. Благодаря! –

0

Вы упускаете ИНЕКЕ. Предполагая, что вам нужны только данные от items, попробуйте следующее:

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