2013-08-30 2 views
1

структура:Как выбрать 2 tbls, но только 1 строку из второго tbl с самым низким PK в MySQL?

TBL 1

|car_id(PK)| make | model | year | 
----------------------------------- 
|  1 | Toyot | Camry | 1999 | 
|  2 | Honda | Civic | 2005 | 

TBL 2

|img_id(PK)| car_id| img_link | 
------------------------------------ 
|  1 | 1 | tcamry1.jpeg | 
|  2 | 1 | tcamry2.jpeg | 
|  3 | 1 | tcamry3.jpeg | 
|  4 | 2 | hcivic1.jpeg | 
|  5 | 2 | hcivic2.jpeg | 

Мой запрос:

SELECT * 
FROM cars c 
LEFT JOIN imgs g 
ON c.car_id=g.car_id 
WHERE 1 

Результат:

|img_id(PK)| car_id| make | model | year | img_link | 
----------------------------------------------------------- 
|  1 | 1 | Toyot | Camry | 1999 | tcamry1.jpeg | 
|  2 | 1 | Toyot | Camry | 1999 | tcamry2.jpeg | 
|  3 | 1 | Toyot | Camry | 1999 | tcamry3.jpeg | 
|  4 | 2 | Honda | Civic | 2005 | hcivic1.jpeg | 
|  5 | 2 | Honda | Civic | 2005 | hcivic2.jpeg | 

Мне нужно получить 1 строку для каждой машины и иметь предложение WHERE с чем-то вроде самого низкого значения img_id из всех img_id, связанных с одним и тем же автомобилем.

Результат Я хочу:

|img_id(PK)| car_id| make | model | year | img_link | 
----------------------------------------------------------- 
|  1 | 1 | Toyot | Camry | 1999 | tcamry1.jpeg | 
|  4 | 2 | Honda | Civic | 2005 | hcivic1.jpeg | 

Спасибо.

UPDATE:

мне нужно что-то вдоль этих линий: -/

SELECT g.id, c.car_id, c.mc_make, c.mc_model, c.mc_year, c.mc_desc 
FROM mycars c 
INNER JOIN (SELECT * FROM mycars_gallery g WHERE) 
ON c.car_id=g.car_id 
WHERE g.id = min(g.id) 
+0

У меня есть ощущение, что мне нужно посмотреть функцию min(), см. Обновление выше. Я просто не знаю правильного синтаксиса – Tatarin

ответ

2

Try:

SELECT MIN(b.img_id), a.car_id, a.make, a.model, a.year, b.img_link 
FROM cars a 
LEFT JOIN imgs b ON a.car_id = b.car_id 
GROUP BY a.car_id, a.make, a.model, a.year ; 

Демо: http://sqlfiddle.com/#!2/1469f/15 Надеюсь, что это помогает.

+0

Спасибо, это работает! – Tatarin

0
SELECT * 
FROM cars c 
LEFT JOIN imgs g 
ON c.car_id=g.car_id 
WHERE 1 
GROUP BY g.img_link; 

попробовать это .. не уверен, хотя.

+0

по-прежнему, тот же результат. не работает – Tatarin

1
SELECT * 
FROM cars c 
LEFT JOIN imgs g 
ON c.car_id=g.car_id 
WHERE img_id IN(SELECT MIN(img_id)) GROUP BY model