2016-04-04 3 views
1

У меня есть следующая таблица с именем Player_MVP_Month, которая связана с моей таблицей Player.UPDATE Несколько записей на основе множественных значений, возвращаемых

Here is the Table

Я хотел бы обновить MVP за октябрь 2015. Там может быть несколько MVPs за каждый месяц, который имеет место в октябрь 2015 года Игрок MVP на основе количества раз он набрал в течение месяца. У меня не было проблем с обновлением декабря, потому что только у одного игрока был MAX COUNT, но для 6 октября у игроков одинаковый счет. Поэтому я хотел бы, чтобы мои идентификаторы 6 игроков были обновлены в течение октября. Как я мог это сделать?

Вот что у меня есть на данный момент:

UPDATE PLAYER_MVP_MONTH 
SET Player_ID = (
    SELECT Player.Player_ID 
    FROM Game JOIN Player ON Game.Winning_Goal = Player.Player_ID 
    WHERE Game_Date BETWEEN '01-10-2015' AND '30-10-2015' 
    GROUP BY Player.Player_ID 
    HAVING COUNT(Winning_Goal) = (SELECT MAX(COUNT(Winning_Goal)) 
           FROM Game 
           WHERE Game_Date BETWEEN '01-10-2015' AND '30-10-2015' 
           GROUP BY Winning_Goal)) 
WHERE PLAYER_MVP_MONTH.MVP_DATE = 'October 2015'; 

Любая помощь будет принята с благодарностью,

Большое спасибо.

Извините, если вы разместили ссылку вместо изображения, но, видимо, мне нужно 10 репутаций для публикации изображений.

Я попытался

MERGE INTO PLAYER_MVP_MONTH USING (SELECT Player.Player_ID FROM Game JOIN Player ON Game.Winning_Goal = Player.Player_ID WHERE Game_Date BETWEEN '01-11-2015' AND '30-11-2015' GROUP BY Player.Player_ID HAVING COUNT(Winning_Goal) = (SELECT MAX(COUNT(Winning_Goal)) FROM Game WHERE Game_Date BETWEEN '01-11-2015' AND '30-11-2015' GROUP BY Winning_Goal)) ON (Player.PLAYER_ID = PLAYER_MVP_MONTH.Player_ID) WHEN MATCHED THEN UPDATE SET PLAYER_MVP_MONTH.Player_ID = Player.Player_ID ;

Кто-нибудь есть какие-нибудь предложения?

ответ

0

Мне кажется, вам нужно использовать команду MERGE, которая будет обновлять или вставлять данные на основе предоставленных критериев.

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm


UPDATE 1: Ваш новый MERGE заявление отсутствует пункт WHEN NOT MATCHED THEN INSERT который добавит дополнительные строки в таблице PLAYER_MVP_MONTH для других игроков, которые имеют одинаковое количество голов.

Было бы что-то вроде этого:

MERGE INTO PLAYER_MVP_MONTH 
    USING (SELECT Player.Player_ID 
     FROM Game JOIN Player ON Game.Winning_Goal = Player.Player_ID 
     WHERE Game_Date BETWEEN '01-11-2015' AND '30-11-2015' 
     GROUP BY Player.Player_ID 
     HAVING COUNT(Winning_Goal) = (SELECT MAX(COUNT(Winning_Goal)) 
            FROM Game 
            WHERE Game_Date BETWEEN '01-11-2015' AND '30-11-2015' 
            GROUP BY Winning_Goal)) 
    ON (Player.PLAYER_ID = PLAYER_MVP_MONTH.Player_ID) 
    WHEN MATCHED THEN UPDATE SET PLAYER_MVP_MONTH.Player_ID = Player.Player_ID 
    WHEN NOT MATCHED THEN INSERT INTO PLAYER_MVP_MONTH (MVP_DATE, PLAYER_ID) VALUES ('01-11-2015', Player.Player_ID); 
Смежные вопросы