2013-11-14 4 views
0

Помощь, мне нужно использовать левое соединение. У меня есть две таблицы; Horse_table, у которого есть horse_id, имя. Entry_Table, который имеет horse_id, место. Мне нужно указать имя лошади и имя для лошадей, которые никогда не выигрывали первое место. Заказ by horse_id.Синтаксис синтаксиса двух таблиц

Вот что у меня есть;

Select a.horse_id, a.name, 
COALESCE ('place'>=1) as 'Never Won First Place' 
From horse a LEFT JOIN entry b 
ON (a.horse_id=b.horse_id) 
AND (b.horse_id=a.name) 
Where Horse_id<=502 
ORDER by Horse_id; 

Проблема с этим она возвращает все лошадь, а не те, которые он должен, я попытался с помощью Where b.place>=1, но он не возвращает никаких результатов.

+0

Вы пытались переключить стол в предложение From? Выберите ... Из ввода b LEFT JOIN horse a ON (b.horse_id = a.horse_id) Где место> = 1 – charlieparker

+2

Я думаю, вы должны удалить 'AND (b.horse_id = a.name)' из запроса. – Hussain

+0

Правильные DDL всегда полезны. – Strawberry

ответ

0

попробовать что-то вроде этого:

SELECT a.horse_id, 
    a.NAME 
FROM horse a 
INNER JOIN (
    SELECT horse_id, min(place) 
    FROM ENTRY 
    GROUP BY horse_id 
    HAVING MIN(place) > 1 
) b ON a.horse_id = b.horse_id 
ORDER BY Horse_id; 

Вы РЕГИСТРИРУЙЕТЕСЬ таблицу лошади с лучшей позицией, которую он когда-либо законченным (MIN (место)) до тех пор, как эта позиция не первое место.

0

Список всех лошадиных имен и лошадей, чье место больше 1 (средства никогда не получили первую позицию).

Select 
    a.horse_id, a.name, 
From 
    horse a 
INNER JOIN 
    entry b 
ON 
    a.horse_id=b.horse_id 
Where 
    b.place>1 
ORDER by a.horse_id; 
Смежные вопросы