用于连接作为表的特定字段一部分的子串的正确代码,以创建新字段

时间:2015-11-17 04:25:20

标签: mysql concatenation

我在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(gam‌​e.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`

1 个答案:

答案 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`

希望这有帮助。