Ограничить результат SQL по типу (значение столбца) - PullRequest
2 голосов
/ 16 февраля 2011

У меня есть таблица DailyMeal:

Name     | Type
------------------------
orange   | fruit
carrot   | vegetable
apple    | fruit
potato   | vegetable
eggplant | vegetable
cucumber | vegetable
lemon    | fruit

Мой запрос должен вернуть все овощи и один и только один фрукт, неважно, какой именно.

Возможно ли с одним запросом? Нет хранимой процедуры.

Редактировать: Да, это союз. Спасибо всем авторам.

Ответы [ 5 ]

4 голосов
/ 16 февраля 2011
select * from daily_meal where type = 'fruit' limit 1
union
select * from daily_meal where type = 'vegetable'

пример

mysql> desc daily_meal;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(100) | YES  |     | NULL    |       |
| type  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> select * from daily_meal;
+----------+-----------+
| name     | type      |
+----------+-----------+
| apple    | fruit     |
| potato   | vegetable |
| eggplant | vegetable |
| cucumber | vegetable |
| lemon    | fruit     |
| orange   | fruit     |
| carrot   | vegetable |
+----------+-----------+
7 rows in set (0.00 sec)

mysql> select * from daily_meal where type = 'fruit' limit 1
    -> union
    -> select * from daily_meal where type = 'vegetable';
+----------+-----------+
| name     | type      |
+----------+-----------+
| apple    | fruit     |
| potato   | vegetable |
| eggplant | vegetable |
| cucumber | vegetable |
| carrot   | vegetable |
+----------+-----------+
5 rows in set (0.00 sec)
1 голос
/ 16 февраля 2011

Попробуйте это:

SELECT * 
  FROM DailyMeal
 WHERE type = 'vegetable'
 UNION ALL
SELECT *
  FROM (
                SELECT * 
              FROM DailyMeal
             WHERE type = 'fruit'
             LIMIT 1
             ) a
1 голос
/ 16 февраля 2011

Я думаю, что вы могли бы добиться этого, используя UNION - объединить всех, кто имеет тип овощей, и отдельный запрос, ограничивающий 1 фрукт.

1 голос
/ 16 февраля 2011

Как насчет

SELECT * FROM DailyMeal WHERE Type = 'vegetable'
UNION Select TOP 1 * FROM DailyMeal WHERE Type = 'fruit'
1 голос
/ 16 февраля 2011
select * from DailyMeal where Type = 'vegetable' or Name = 'orange'

или

select * from DailyMeal where Type = 'vegetable' or Name in (select top 1 Name from DailyMeal where Type = 'fruit')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...