Mysql join получает по одной строке за матч - PullRequest
2 голосов
/ 01 августа 2011

У меня есть запрос mysql с объединением, и я хочу, чтобы для каждого совпадения была получена только одна строка, а не все. Что я имею в виду.

например, у нас есть две таблицы

ids(int id)
colors(int id, varchar color)

У меня есть запрос

select ids.id, colors.color from ids join colors on ids.id = colors.id;

и получите следующее

id | color
------------------
1  | red 
1  | blue 
2  | yellow 
3  | green 
3  | pink

Я хочу запрос, чтобы получить

id | color 
-----------------
1  | red 
2  | yellow 
3  | green 

Ответы [ 5 ]

4 голосов
/ 27 ноября 2012

Попробуйте использовать подзапрос, который ограничивает количество результатов:

select ids.id, (select colors.color WHERE colors.id = ids.id LIMIT 1) AS color FROM ids;
3 голосов
/ 01 августа 2011
select 
  ids.id, 
  min(colors.color) as color
from 
  ids 
join 
  colors on ids.id = colors.id
group by
  ids.id
;
0 голосов
/ 02 августа 2011

Спасибо за ваши ответы, вы все сказали мне, чтобы я использовал группу Конечно, этот метод был первым, который я попробовал, но я получаю следующую ошибку:

Столбец "COLORS.COLOR" должен быть в списке GROUP BY;Оператор SQL:

Мой запрос:

SELECT 
    ids.id, colors.color 
FROM ids 
     JOIN colors ON ids.id = colors.id 
GROUP BY ids.id;

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

0 голосов
/ 01 августа 2011
SELECT ids.id, colors.color FROM ids JOIN colors ON ids.id = colors.id GROUP BY ids.id
0 голосов
/ 01 августа 2011

select ids.id, colors.color from ids join colors on ids.id = colors.id group by ids.id;

Но помните: вы получаете негарантированное значение для colors.color.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...