Как я могу ограничить различные предложения WHERE в MySQL? - PullRequest
5 голосов
/ 09 июня 2011

Допустим, у меня есть следующая таблица MySQL:

id | species
------------
1  | dog
2  | dog
3  | dog
4  | cat
5  | cat
6  | fish
7  | fish
8  | fish

Я хочу получить идентификаторы 2 собак, 1 кошки и 1 рыбы (они не обязательно должны быть в порядке).Например, {1, 2, 4, 6} будет правильным выводом.

Есть ли способ сделать это в одном запросе SQL?Насколько я знаю, LIMIT - довольно простой оператор, который не может этого сделать.Может ГДЕ можно манипулировать?Или несколько SQL-запросов будут лучшим способом сделать это?

1 Ответ

9 голосов
/ 09 июня 2011

Насколько я знаю, лучшее, что вы можете сделать, это использовать UNION, чтобы объединить результаты трех SELECT с, например ::

SELECT id, species FROM animals
  WHERE species = 'dog'
  LIMIT 2
UNION
SELECT id, species FROM animals
  WHERE species = 'cat'
  LIMIT 1
UNION
SELECT id, species FROM animals
  WHERE species = 'fish'
  LIMIT 1;

# Producing:
#
# id | species
# ---+--------
#  1 | dog
#  2 | dog
#  4 | cat
#  6 | fish
...