2015-09-09 2 views
0

мне нужно добавить где предложение только если условие уважается, например:Если заявление в пункте, где

SELECT * FROM car Where <a condition> 
and (if (car.brand = 'Renault') then car.color = 'red') 

В моем примере: если бренд Renault я хочу только красные автомобили, и я хочу другую машину только если нет renault

Можно ли написать что-то подобное в SQL (без PLSQL)?

ответ

2

Вы не можете использовать if в пункте where (SQL даже не знает if). Для того, чтобы достичь того, чего вы хотите, вы должны использовать что-то вроде:

where ... and (car.brand = 'Renault' and car.color = 'red' or car.brand <> 'Renault') 

Это разъединение говорит «если бренд Renault, то цвет должен быть красным, для другой марки это не имеет значения».

Если вы - как комментарий - «нужны только красный Renault, ... другой автомобиль, только если нет Рено», то вам необходимо проверить несуществование Renault:

where ... 
and (car.brand = 'Renault' and car.color = 'red' 
    or not exists (select * from car where car.brand = 'Renault')) 
+0

Спасибо, но в случае, если это условие соблюдено: car.brand = 'Renault' и car.color = 'red', i хочу только renault red, как я могу это сделать? Я хочу другой автомобиль, только если нет renault – Olaf

+0

Это совершенно другой случай, вы должны обновить свой вопрос, чтобы конкретно включить этот бит, потому что он стоит, это не то, что вы просите. Я добавил пример, который затрагивает этот вопрос. –

1

Простая логика ниже.

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

SELECT * 
FROM car 
WHERE <a condition> 
AND ((car.brand= 'Renault' and car.color = 'red') OR car.brand != 'Renault') 
+0

Спасибо, Марк, я бросил его в запасную минуту. – StoicFnord

+0

Нет проблем, я исправил его в вопросе, поэтому я также исправил его во всех ответах :) –

0

Попробуйте

SELECT * FROM car Where <a condition> 
and (car.brand = 'Renault' AND car.color = 'red' OR car.brand <> 'Renault')