MySQL выбирает в зависимости от результатов

#mysql

#mysql

Вопрос:

У меня есть таблица с фруктами:

 id    fruit_type    color
--------------------------
 1      apple      yellow
 2      apple      green
 3    strawberry    red
 

Я хочу выбрать все фрукты из моей таблицы. Но если это яблоко, я хочу включить его только в том случае, если оно зеленое.
Как я могу добиться этого в одном запросе MySQL?

Комментарии:

1. довольно интересный сценарий 🙂

Ответ №1:

Ничего сложного, вам просто нужно использовать OR оператор в вашем WHERE состоянии:

 SELECT *
FROM fruits
WHERE fruit_type != "apple"
OR color = "green"; /* ie where fruit_type = "apple" and color = "green" */
 

.

Комментарии:

1. Я, по-видимому, dv. Не могу вспомнить, почему :-

Ответ №2:

Я думаю, вы могли бы использовать объединение.

 Select * from fruits where fruit_type<> 'apple'    
Union
Select * from fruits where fruit_type= 'apple' and color = 'green'
 

Комментарии:

1. В больших масштабах это довольно неэффективно. Есть такие операторы, OR которые можно использовать для этого.

2. Я согласен, но это не упоминается в вопросе, рассматривает ли он производительность. Я просто хотел показать альтернативу

3. Это то, что я думаю: сначала выбираются все фрукты, которые не являются яблоками, а затем этот результат объединяется со всеми зелеными яблоками?

4. @BenediktB да, вы хорошо понимаете

Ответ №3:

здесь я создаю запрос для sql server . таким же образом вы можете создать в mysql

 Select id, fruit_type,color from
(
Select 
Case when fruit_type = 'apple' and color <> 'Green'
then 'N' Else 'Y' end as selected, 
*
from fruits )temptable
where temptable.selected = 'Y'
 

SQLFIDDLE