2013-07-26 2 views
-1

Это мой запросВозьмите запрос верно, когда один пункт является ложным

SELECT pl.NAME 
    ,pl.id_product 
    ,pl.link_rewrite 
    ,i.id_image 
    ,ar.id_auctions_rutcom 
    ,ar.actual_bid_price 
    ,ar.start_price 
    ,ar.min_price 
    ,ar.buy_now_price 
    ,ar.finish_date 
FROM ps_image i 
    ,ps_auctions_rutcom ar 
    ,ps_product_lang pl 
WHERE ar.finish_date > '2013-07-26 11:18:15' 
    AND ar.start_date < '2013-07-26 11:18:15' 
    AND ar.active = 1 
    AND ar.finish = 0 
    AND pl.id_product = ar.id_product 
    AND i.id_product = ar.id_product 
    AND i.cover = 1 
    AND pl.id_lang = 6 

У меня есть проблема, когда на столе ps_image нет изображения, где i.id_product = ar.id_product мой запрос возвращал ложь. Как изменить запрос для установки true?

+0

Вы должны объяснить больше примеров того, что у вас есть и какой результат вы бы хотели получить – FSou1

+0

Вы говорите, вы хотите, чтобы получить остальную часть ТЭН данных, даже если у вас нет изображения? –

+0

См. [Плохие привычки к удару: использование JOIN в старом стиле] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins .aspx). –

ответ

2

Вы должны узнать о JOIN. Погугли это.

Ваш запрос эквивалентен INNER JOIN:

SELECT 
    pl.name, pl.id_product, pl.link_rewrite, i.id_image, ar.id_auctions_rutcom, 
    ar.actual_bid_price, ar.start_price, ar.min_price, ar.buy_now_price, ar.finish_date 
FROM ps_auctions_rutcom ar 
INNER JOIN ps_product_lang pl 
     ON pl.id_product = ar.id_product 
     AND pl.id_lang = 6 
INNER JOIN ps_image i 
     ON i.id_product = ar.id_product 
     AND i.cover = 1 
WHERE ar.finish_date > '2013-07-26 11:18:15' 
    AND ar.start_date < '2013-07-26 11:18:15' 
    AND ar.active = 1 
    AND ar.finish = 0 

С INNER JOIN, если нет соответствующей строки в связанной таблице, строка опущена из набора результатов.

Теперь вы должны использовать OUTER JOIN, и в этом случае строка все еще находится в результирующем наборе, а недостающая информация установлена ​​в NULL.

SELECT 
    pl.name, pl.id_product, pl.link_rewrite, i.id_image, ar.id_auctions_rutcom, 
    ar.actual_bid_price, ar.start_price, ar.min_price, ar.buy_now_price, ar.finish_date 
FROM ps_auctions_rutcom ar 
INNER JOIN ps_product_lang pl 
     ON pl.id_product = ar.id_product 
     AND pl.id_lang = 6 
LEFT OUTER JOIN ps_image i 
      ON i.id_product = ar.id_product 
      AND i.cover = 1 
WHERE ar.finish_date > '2013-07-26 11:18:15' 
    AND ar.start_date < '2013-07-26 11:18:15' 
    AND ar.active = 1 
    AND ar.finish = 0 
0

Вы можете добавить в запрос, чтобы убедиться, что ps_image не имеет нулевой

Где i.id_product IS NOT NULL

0

Вы должны отделить присоединяется от ваших фильтров, а затем использовать left join, чтобы обеспечить все результаты независимо от того, существует ли изображение

FROM ps_auctions_rutcom ar 
    left join 
    ps_image i on i.id_product = ar.id_product 
     and i.cover = 1 
    left join 
    ps_product_lang pl on pl.id_product = ar.id_product 
     and pl.id_lang = 6 
WHERE .... 
Смежные вопросы