2015-11-03 2 views
0

У меня есть две таблицы, давайте представим, что они являются следующие:Как сделать сгруппированные путем объединения в sql?

домашних животных

+----+----------+-------+ 
| id | name  | type | 
+----+----------+-------+ 
| 1 | itchy | mouse | 
| 2 | poochie | dog | 
| 3 | scratchy | cat | 
| 4 | john  | human | 
+----+----------+-------+ 

воротники

+----+---------------+--------+ 
| id | name   | pet_id | 
+----+---------------+--------+ 
| 1 | collar_heaven | 2  | 
| 2 | red_collar | 2  | 
| 3 | cat_collar | 3  | 
| 4 | tiny_collar | 1  | 
| 5 | backup_collar | 2  | 
+----+---------------+--------+ 

(Обратите внимание, что животное ID # 4 не имеет воротника)

Я хочу выбрать MIN(name) и MAX(name) для каждого воротника, соединенного с домашними животными.

Так желаемый результат:

Ожидаемый выход

+----+----------+-------+-------------------+------------------+ 
| id | name  | type | collar_first_name | collar_last_name | 
+----+----------+-------+-------------------+------------------+ 
| 1 | itchy | mouse | tiny_collar  | tiny_collar  | 
| 2 | poochie | dog | backup_collar  | red_collar  | 
| 3 | scratchy | cat | cat_collar  | cat_collar  | 
| 4 | john  | human | NULL    | NULL    | 
+----+----------+-------+-------------------+------------------+ 

По существу своего рода

SELECT id, name, type, MIN(name) as first_name, MAX(name) as last_name 
FROM pets JOIN collars 
GROUP BY pet_id 

ответ

2
SELECT 
    pets.id 
    , pets.name 
    , pets.type  
    , MIN(collars.name) as first_name 
    , MAX(collars.name) as last_name 
FROM 
    pets 
LEFT OUTER JOIN 
    collars ON pets.id = collars.pet_id 
GROUP BY 
    pets.id 
    , pets.name 
    , pets.type  
1
SELECT 
    pets.id, 
    pets.name, 
    pets.type, 
    MIN(collars.name) as first_name, 
    MAX(collars.name) as last_name 
FROM pets LEFT JOIN collars ON pets.id = collars.pet_id 
GROUP BY 
    pets.id, 
    pets.name, 
    pets.type 
Смежные вопросы