2013-09-26 4 views
5

У меня есть следующее, которое возвращает определенные сообщения из таблицы. Как и ожидалось, он дает 11 строк.MYSQL JOIN with IN:

-- SQL gives 11 rows 
select p.ID from wp_posts p where p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855); 

У меня есть второй стол 'wp_raceresult', который записывает результаты гонки человека. У человека только 7 результатов в этой таблице. Я хочу получить информацию о всех результатах гонки в этом наборе гонок для конкретного бегуна, т. Е. NULL для каждой гонки, где результата нет. SQL i имеет atm только результаты соответствующих строк.

-- SQL only gives 7 rows 
select p.ID,rr.leaguepoints from wp_posts p 
join wp_raceresult rr on p.id=rr.race 
where p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855) 
and runner=7 

Я попытался с помощью FULL OUTER, влево, вправо положения и UNION, но без успеха. Есть идеи?

ответ

1

Поскольку вы упомянули, что вы уже пробовали LEFT JOIN и результат, который вы получили это а не тот, который вы ожидаете, потому что вы запрашиваете runner = 7 в конечном результате. Переместите оператор в предложении ON, и он будет работать.

SELECT p.ID, 
     rr.leaguepoints 
FROM wp_posts p 
     LEFT JOIN wp_raceresult rr 
      ON p.id = rr.race AND 
       rr.runner = 7        -- <<=== move it here 
WHERE p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855) 

Дополнительная информация:

-1

Если вам нужны все записи из одной таблицы, и сопоставление данных в справочной таблице, вы можете попробовать с LEFT JOIN

select 
    p.ID, 
    rr.leaguepoints 
    from wp_posts p 
    LEFT join wp_raceresult rr on p.id=rr.race 
    where p.ID IN (2596, 2597, 2598, 2600, 2849, 2928, 2851, 2852, 3011, 2854, 2855) 
    and runner=7