我在Mac OS X上使用MySQL 5.6.26和Sequel Pro。我想在表Game_date
中创建一个名为starting_pitcher_game_log
的新字段。为了创建这个字段,我必须从这个名为GAME_ID
的表中的另一个字段中提取并附加子字符串。这是我的代码:
ALTER TABLE starting_pitcher_game_log ADD Game_date INTEGER;
UPDATE starting_pitcher_game_log
SET Game_date = CONCAT(SUBSTR(GAME_ID,4,4),'-',SUBSTR(GAME_ID,10,2),'-',SUBSTR(GAME_ID,12,2))
FROM game
WHERE game.GAME_ID = starting_pitcher_game_log.GAME_ID
我收到以下错误消息:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'FROM game WHERE game.GAME_ID = 第3行的starting_pitcher_game_log.GAME_ID'
有人可以提供有关代码错误的指导吗?
如果您需要其他信息,请与我们联系。
提前谢谢。
更新Subin代码更改后的状态: 谢谢你的帮助Subin。不工作。我用空值删除了字段。然后我输入你的原始代码:
ALTER TABLE starting_pitcher_game_log ADD Game_date INTEGER;
UPDATE starting_pitcher_game_log
INNER JOIN game ON game.GAME_ID = starting_pitcher_game_log.GAME_ID
SET starting_pitcher_game_log.Game_date = CONCAT(SUBSTR(game.GAME_ID,4,4),'-',SUBSTR(game.GAME_ID,10,2),'-',SUBSTR(game.GAME_ID,12,2))
它出现错误:'字段列表'中的未知列'starting_pitcher_game_log.Game_date'。当我在“ADD”之后添加“COLUMN”时,查询会运行,但只会向列中添加空值。
我不确定我做错了什么。
view of sequel pro of MySQL database table in question "starting_pitcher_game_log"
Subin,通过您的更改,查询运行时间很长,但它仍然在该列的每一行上留下Game_id列“null”。上面是starting_pitcher_game_log表的表内容视图的屏幕截图。那里有“Game_ID”列,这就是我一直试图从中创建Game_date列的信息 - 日期用字符编号4到11表示。我不确定这是否有用。
无论如何,谢谢你的帮助。
更新
以下是有效的代码:
ALTER TABLE retrosheet.starting_pitcher_game_log ADD COLUMN Game_Date DATE;
UPDATE retrosheet.starting_pitcher_game_log AS b,
retrosheet.game AS g
SET b. Game_Date = CONCAT(SUBSTR(g.`GAME_ID`,4,4),'-',SUBSTR(g.`GAME_ID`,8,2),'-',SUBSTR(g.`GAME_ID`,10,2))
WHERE b.`Game_ID` = g.`GAME_ID`
答案 0 :(得分:2)
您可以将{JOIN与UPDATE()
一起使用。
ALTER TABLE starting_pitcher_game_log ADD Game_date VARCHAR(15);
UPDATE starting_pitcher_game_log
INNER JOIN game ON game.`GAME_ID` = starting_pitcher_game_log.`GAME_ID`
SET starting_pitcher_game_log.`Game_date` = CONCAT(SUBSTR(game.`GAME_ID`,4,4),'-',SUBSTR(game.`GAME_ID`,10,2),'-',SUBSTR(game.`GAME_ID`,12,2))
在不使用JOIN
关键字的情况下实现相同结果的替代方法。
UPDATE starting_pitcher_game_log ,game
SET starting_pitcher_game_log.`Game_date` = CONCAT(SUBSTR(game.`GAME_ID`,4,4),'-',SUBSTR(game.`GAME_ID`,10,2),'-',SUBSTR(game.`GAME_ID`,12,2))
WHERE game.`GAME_ID` = starting_pitcher_game_log.`GAME_ID`
希望这有帮助。