2011-01-16 1 views
0

Я хочу построить запрос следующим образом:MySQL - условный запрос, результат на заявление

SELECT * FROM t1 WHERE видно = 'да' AND IF (продажа = 'да', величина> 0)

Моя цель состоит в том, чтобы получать только строки из таблицы с количеством больше 0, только когда это продукт «продажи». Я пробовал инструкции IF и CASE, но кажется, что результат их может быть только целым числом, а не выражением.

Я застрял здесь ...

ответ

1
SELECT * FROM t1 WHERE visible='yes' AND ((sale = 'yes' AND quantity > 0) OR sale != 'yes') 
+0

Я думал много о сложном для этого, спасибо, что выпрямил его для меня! – klaaz

1

У вас не хватает 3-го InThe IF В параметре функции

SELECT * 
FROM t1 
WHERE visible='yes' 
    AND IF (sale = 'yes', quantity > 0, 1) 

действует SQL

2

Если вы читали его оригинальный текст "получить только строки из таблицы с количеством больше 0 ТОЛЬКО, когда это продукт «продажи»

Поскольку вопрос несколько плохо сформулирован. Предполагается, что:

Возвратите ТОЛЬКО пункты, где SALE = 'yes' и QUANTITY> 0 и VISIBLE = 'yes'.

Если это то, что пользователь хочет, то SQL для просто:

SELECT * FROM t1 WHERE sale='yes' AND quantity > 0 AND visible='yes' 

BTW, если ваш DB будет держать много данных, используя булевы (истина/ложь) вместо типа VARCHAR гораздо больше эффективен в двигателе и сэкономит время на выборе и вставках.

+0

Спасибо, я знаю, что это относительно мало. – klaaz