2016-02-19 6 views
0

У меня возникли трудности с копированием результатов этого запроса (столбец под названием «FIPminus») в таблицу start_pitcher_stats, которая у меня есть в той же базе данных.Как сохранить столбец результатов запроса в столбец таблицы в той же базе данных

Когда я запускаю следующий код, результаты отображаются как на скриншоте под кодом ниже. Однако, когда я использую оператор UPDATE ниже заявление ALTER TABLE, как описано в следующей теме, я получаю следующее сообщение об ошибке:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT 
IF(s.HomeAway_CD ='Home' 

stackoverflow.com/questions/13317838/how-to-insert-a-query-result-into-a-column-mysql

ALTER TABLE starting_pitcher_stats ADD COLUMN FIPminus DOUBLE; 
    SELECT 
    IF(s.HomeAway_CD ='Home' 
    ,((((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP + (((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP - (((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP * (p.Basic_PF/100))))/(b.FIP)*100) 
    ,(((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP/(b.FIP)*100)) AS FIPminus 
    FROM starting_pitcher_game_log AS s 
    INNER JOIN GUTS AS g 
     ON s.YEAR_ID=g.YEAR_ID 
    INNER JOIN Park_Factors AS p 
     ON s.YEAR_ID=p.YEAR_ID AND s.FLD_TEAM_ID=p.Team_ID 
    INNER JOIN AL_NL_MLB_lg_avg_pitcher_stats AS b 
     ON s.YEAR_ID=b.YEAR_ID AND s.lg_ID=b.lg_ID WHERE b.pitcher_type='starter' 
    GROUP BY s.Starting_Pitcher, s.GAME_ID 

enter image description here

Здесь Снимок экрана со структурой таблицы, которую я бы хотел скопировать в:

enter image description here

UPDATE: Вот код, который я использовал с UPDATE заявление, которое произвело ошибку:

ALTER TABLE starting_pitcher_stats ADD COLUMN FIPminus DOUBLE; 
UPDATE starting_pitcher_stats 
SELECT 
IF(s.HomeAway_CD ='Home' 
,((((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP + (((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP - (((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP * (p.Basic_PF/100))))/(b.FIP)*100) 
,(((13*s.HR_a)+(3*(s.walks_a+s.HBP))-(2*s.strike_outs))/s.innings_pitched + g.cFIP/(b.FIP)*100)) AS FIPminus 
FROM starting_pitcher_game_log AS s 
INNER JOIN GUTS AS g 
    ON s.YEAR_ID=g.YEAR_ID 
INNER JOIN Park_Factors AS p 
    ON s.YEAR_ID=p.YEAR_ID AND s.FLD_TEAM_ID=p.Team_ID 
INNER JOIN AL_NL_MLB_lg_avg_pitcher_stats AS b 
    ON s.YEAR_ID=b.YEAR_ID AND s.lg_ID=b.lg_ID WHERE b.pitcher_type='starter' 
GROUP BY s.Starting_Pitcher, s.GAME_ID 

Спасибо заранее.

UPDATE: Вот код, который работал, но он взял до смешного долго бежать:

ALTER TABLE starting_pitcher_stats ADD COLUMN FIPminus DOUBLE; 
UPDATE starting_pitcher_stats AS s 
SET FIPminus = (SELECT f.FIPminus FROM FIPminus AS f 
WHERE s.Starting_Pitcher=f.Starting_Pitcher AND s.GAME_ID=f.GAME_ID) 
+0

Пожалуйста, заполните полный запрос, который вы пытаетесь запустить 'UPDATE'. –

+0

ОК, я добавил код с инструкцией UPDATE, которая вызвала ошибку в исходном сообщении ... Я также использовал INSERT INTO и создал другие типы ошибок. – LeeZee

+0

Что вы пытаетесь сделать? Вставить новые строки или обновить существующие строки в таблице 'start_pitcher_stats' со значением' fipminus'? Если вы хотите обновить существующие строки, как вы хотите «подключить» свою новую информацию к существующей строке? Должен быть какой-то общий столбец как в вашем запросе, так и в таблице назначения –

ответ

1

Из того, что я понимаю, вы уже заселена таблицу FIPminus со значениями, которые теперь необходимо обновить starting_pitcher_stats таблицу ,

Синтаксис JOIN можно использовать в команде UPDATE.

UPDATE 
    starting_pitcher_stats AS s 
    INNER JOIN FIPminus AS f ON 
    s.Starting_Pitcher = f.Starting_Pitcher AND s.GAME_ID = f.GAME_ID 
SET FIPminus = f.FIPminus 

Если запрос выполняется относительно медленно для вас, рассмотреть возможность создания индексов , который будет включать в себя столбцы, используемые в сравнении с обеих таблиц (перед запуском обновления!):

ALTER TABLE FIPminus ADD INDEX (Starting_Pitcher, GAME_ID); 
ALTER TABLE starting_pitcher_stats ADD INDEX (Starting_Pitcher, GAME_ID); 

Вы также можете прочитать около speed of UPDATE statements и решить, действительно ли это релевантно для вас.

+0

Nice, Look_Me. Он работал хорошо, мгновенно на самом деле, после индексирования, как вы предложили. Спасибо! – LeeZee