连接属于 table 的特定字段的子字符串以创建新字段的正确代码

correct code for concatenating substrings that are part of a particular field of a table to create new field

我在 Mac OS X 上使用 MySQL 5.6.26 和 Sequel Pro。我想创建一个名为 Game_date 的新字段在 table starting_pitcher_game_log 中。为了创建这个字段,我必须从这个名为 GAME_ID 的 table 中的另一个字段中提取并附加子字符串。这是我的代码:

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

我收到以下错误消息:

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 'FROM game WHERE game.GAME_ID = starting_pitcher_game_log.GAME_ID' at line 3

有人可以就此处代码的问题提供指导吗?

如果您需要更多信息,请告诉我。

提前致谢。

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(gam‌​e.GAME_ID,12,2))

它给出一个错误:'field list' 中的未知列 '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 table 的 table 内容视图的屏幕截图。 "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`

您可以在 UPDATE() 中使用 JOIN。

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`

希望对您有所帮助。