2017-01-13 2 views
1

я написал запрос SQL для извлечения продукта Теперь я хочу применить где положение в моем запросе, но для того, где я есть там состояниеКак применить, если еще в SQL запросе

if stock = 'in': 
where will be num>0: 

if stock = 'out': 
where will be num = 0; 
if stock = ' ': 
no where clause will apply 

я пишу это для двоих условия

where  
    case 
     when stock='in' then num_in_stock > 0 
     when stock ='out' then num_in_stock = 0 
    end; 

но не работает. Я получаю сообщение об ошибке:

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; as a where a.partner_id = 5 order by a.date_updat' at line 20") I am getting stock variable by

stock = request.GET.get('stock') 

Мой полный запрос является

SELECT distinct a.product_id, a.variant_id 
    from 
    (
     SELECT cp.id as variant_id, 
     COALESCE(cp.parent_id,cp.id) as product_id, 
     ps.partner_id as partner_id, 
     ps.price_retail as price_retail, 
     COALESCE(oc.order_count,0) as order_count, 
     cp.date_updated as date_updated 
     FROM partner_stockrecord as ps 
     LEFT JOIN catalogue_product as cp on cp.id = ps.product_id 
     LEFT JOIN (
      select product_id,count(product_id) as order_count 
      from order_line group by product_id) as oc on oc.product_id = ps.id 
      where ((''' + stock +''') = 'in' and num_in_stock > 0) or 
       ((''' + stock +''') = 'out' and num_in_stock = 0); 


     ) 
    as a where a.partner_id = '''+ str(partner_obj.id) +''' order by a.date_updated desc; 
    '''); 
+0

можно написать полный запрос и удалять точку с запятой (;) с конца – developerCK

ответ

5

Convert:

where 
    case 
     when stock='in' then num_in_stock > 0 
     when stock ='out' then num_in_stock = 0 
    end 

в:

where (stock = 'in' and num_in_stock > 0) or 
     (stock = 'out' and num_in_stock = 0) 

CASE - это выражение , которое просто возвращает скалярное значение. Он не может использоваться для управления потоком выполнения в SQL.

+0

через ошибку (1054, «Неизвестный столбец» в «where clause»). Stock - мое имя переменной, которое я получаю от frontend –

+0

@vikrantVerma Это другая проблема. В запросе, который вы опубликовали, нет такой переменной. Вместо этого вы, похоже, используете регулярное поле таблицы, например 'num_in_stock'. –

+0

Я использую «сток» вместо кода запаса без какой-либо ошибки, но данные отображаются {«данные»: []} –

Смежные вопросы