2014-12-25 3 views
0

Есть две таблицы:Выбор записей из совместных таблиц

tblJumper 
    JumperID 
    JumperName 

и

tblWidthScored 
    ScoreID 
    fkJumperID 
    fkScoredWidth 

Таблицы рассказанные tblWidthScored.fkJumperID = tblJumper.JumperID

Таблица содержит следующие данные:

tblJumper 
    1 Tom 
    2 Jerry 
    3 Bugs 
tblWidthScored 
    1 1 5,72m 
    2 2 6,13m 
    3 1 5,80m 
    4 3 6,40m 
    5 2 6,30m 
    6 3 6,20m 

Что я пытаюсь получить список каждого Перемычки personla лучше:

Tom 5,80m 
    Jerry 6,30m 
    Bugs 6,40m 

Пробовал SELECT DISTINCT ... в различных формах, но не удалось каким-либо образом. Любой мог бы дать подсказку, пожалуйста? Спасибо!

ответ

0

Хотя я думаю, что это просто вопрос регистрации и соответствующие статьи можно найти в Интернете, я выложу один из ответов ...

SELECT 
    J.JumperName, 
    S.Score 
FROM tblJumper as J 
    INNER JOIN(
       SELECT 
       fkJumperID, 
       Max(fkScoredWidth) as Score 
       FROM tblWidthScored 
       GROUP BY 
       fkJumperID 
      ) as S on J.JumperID = S.fkJumperID 

В вы просите подсказки в ваш фактический вопрос на самом деле:

Ты пытаешься найти персональные реквизиты! Это означает некоторую совокупность: Maximum.

Вы пытаетесь найти персональные реквизиты четко. Не «лучший результат среди всех прыгунов», но каждый человек личный. Это означает какое-то различие или группировку, которую вы можете разделить на людей, которые люди набирают: Group By Clause

+1

Спасибо за вашу помощь - и подробность о том, как Найди это. Не думал о «группе», поэтому даже не смотрел в правильном направлении. –

+0

Добро пожаловать. Я рад, если бы мне было полезно;) Я откладываю свой нисходящий поток, так как вы предоставили обратную связь и сделали некоторые исследования (я думаю :)), и для этого было использовано downvote; и любезно прошу вас принять один из этих ответов как правильный. Поскольку мы все принимаем одинаковые подходы и даем одинаковые ответы, вы можете просто выбрать один из них; это не имеет значения, потому что правильным является «Группа By» –

+0

Здравствуйте, The_aLiEn! Итак, если вы считаете, что хотите «сжать меня», что бы это ни значило - почему бы не быть мужчиной и придерживаться этого. Я долгое время просиживал - как вы сказали в своем прекрасном объяснении: все это в моем вопросе.С вашего изображения я мог бы сказать, что начал с dBase и sql еще до того, как вы были Born, и что-то было потеряно за прошедшие десятилетия. Я даже не смотрел в правильном направлении. Вы сделали большой Иов, указав, как добраться до ответа. Возможно, вы могли бы подумать, что кто-то задает вопрос на Рождество (это все в день моего вопроса - в 1:20 утра!) ... –

0

вы можете попробовать этот запрос. для этого типа запроса вы должны использовать предложение Group BY с дополнительным запросом.

SELECT JumperName, innertblWidthScored 
FROM tblJumper INNER JOIN(SELECT fkJumperID, 
       Max(fkScoredWidth) as innertblWidthScored 
       FROM tblWidthScored 
       GROUP BY fkJumperID) WidthScored 
on tblJumper.JumperID = WidthScored.fkJumperID 

SQL FIDDLE DEMO

0

Вы могли бы также начать с JOIN и сделать GROUP BY впоследствии. И если ваш примерный вывод действительно предлагает порядок сортировки, вам также нужен ORDER BY.

SELECT 
    JumperName 
    , MAX(fkScoredWidth) PersonalBest 
FROM tblJumper 
JOIN tblWidthScored 
    ON JumperID = fkJumperID 
GROUP BY JumperName 
ORDER BY MAX(fkScoredWidth) DESC; 

SQL Fiddle

+0

Это была группа Я не сделал думать о. Спасибо за вашу помощь! –

0

Из результата, кажется, что вы хотите получить перемычку с его лучшим результатом

попробовать это -

select 
    a.jumperName, 
    b.bestScore 
from tblJumper a, (
        select 
         max(fkScoredWidth) as bestScore, 
         fkJumperID 
        from tblWidthScored 
        group by 
         fkJumperID 
       ) b on b.fkJumperID = a.JumperID 
order by 
    a.JumperID 
Смежные вопросы