2016-04-30 5 views
0

У меня есть таблица с именем products, которая содержит все продукты, например, T-Shirt и product_variants, которые имеют соответствующие варианты цветов, например. Черный, синий, зеленый, каждый из которых имеет столбец stock, который удерживает количество оставшихся запасов.MySQL - IF в SELECT для значений столбцов нескольких строк

Я хотел бы построить запрос, который может рассказать мне, какие из продуктов, которые полностью распроданы, а какие нет.

Столбец stock должен быть 0 продан, но если его NULL или > 0, это на складе. NULL используется, когда у нас есть неограниченное количество.

Это следующий результат я хотел бы получить:

product_id|soldOut|stock 
------------------ 
1   |Yes |0 
2   |Yes |0 
3   |No  |NULL 
4   |No  |1 

Что я пытался сделать, заключается в следующем:

  1. захватить все продукты
  2. Сделать присоединиться к product_variants
  3. Группа product_id показывает только один результат на продукт.
  4. Выбор product_id и IF(stock > 0 OR stock IS NULL, 'No', 'Yes') as SoldOUt

Запрос:

SELECT p.product_id, IF(pv.stock > 0 OR pv.stock IS NULL, 'No', 'Yes') as SoldOUt 
FROM products p 
JOIN product_variants pv ON (`pv`.`product_id` = `p`.`product_id`) 
GROUP BY p.product_id 

Результаты в том, что soldOut не правильно - похоже, он просто берет случайный ряд вариантов и проверить stock этого и ответы.

Вместо этого он должен проверить все строки вариантов и посмотреть, не было ли еще что-либо из них еще не продано. (С инструкцией if выше), а затем вернуть один окончательный ответ для этого продукта.

Что я сделал неправильно и как это можно сделать?

ответ

1

Во-первых, вам не нужен join, просто агрегация.

Итак, вот один метод, который проверяет, что все варианты 0:

select pv.product_id, 
     (case when sum(pv.stock = 0) = count(*) then 'Yes' else 'No' 
     end) as SoldOut 
from product_variants pv 
group by p.product_id; 

Я предполагаю, что вы хотите sum(pv.stock), а также для окончательного столбца.

+0

Спасибо! Дала мне новый способ подумать. – Karem

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