Выбор из 2 таблиц с необязательным условием

zaartix

Новичок
Выбор из 2 таблиц с необязательным условием

Есть всего 2 таблицы - comp_price(Товары), comp_price_info(Описания)

comp_price
id|name|price|cid(индекс категории)

comp_price_info
id|priceId(соответствует id из comp_price)|Description

Проблема банальна. Немогу построить запрос, чтоб выбирал из товаров все, где cid=1 и, если есть описание к нему.

далеко не ко всем товарам есть записи в таблице comp_price_info


Составил запрос:
SELECT info.*, pr.* FROM comp_price_info as info, comp_price as pr
LEFT JOIN comp_price ON comp_price.id=info.priceId and pr.cid=1

в таблице comp_price_info пока тока 3 записи, так вот он после этого запроса по 3 раза и выводит каждый товар.

Как сделать человеческую выборку, где каждому товару либо есть, либо нет описания?
 

Demiurg

Guest
SELECT * FROM comp_price as pr
LEFT JOIN comp_price_info ON pr.id=comp_price_info.priceId
where pr.cid=1
 

ziba

Guest
Я в таких случаях пользуюсь ACCESS'ом :) Подключаешь мускульную базу через ODBC и вперед визуально строить запросы. Так проще и быстрее. НО! Но это неправильно!!! Не злоупотреблять!
 

zaartix

Новичок
Demiurg - супер, Вы меня спасли.
А можно узнать в чем моя ошибка? я лефт джойнами никогда не пользовался (пока не приходилось), поэтому не совсем понимаю суть ошибки.

-~{}~ 16.02.04 13:26:

ziba спасибо за идею
 

Demiurg

Guest
zaartix
ошибка в том, что запрос в запросе нет идеи. Составлять запрос нужно примернго так: Сначала выбираем из comp_price все записи cid = 0:
select * from comp_price
where cid = 0
тут, я надеюсь, все понятно. потом добавляем к запросы инфо. Что бы не исчезли записи для которых не info используем left join:
SELECT * FROM comp_price
LEFT JOIN comp_price_info ON comp_price.id=comp_price_info.priceId
where comp_price.cid=1
как видно, запрос остался тем же, просто добавился left join, и все.
 
Сверху