MySQL-使用三个现有表中的键创建新表

MySQL-使用三个现有表中的键创建新表,mysql,Mysql,如何使用现有MySQL表中的信息填充新表。我有三个表,每个表都有一个键,我想将其包含在新表中,如下所示: TRANSACTIONS TABLE tr_id INT NOT NULL AUTO_INCREMENT other columns . . PEOPLE TABLE p_id INT NOT NULL AUTO_INCREMENT tr_id INT other columns . . HOLIDAYS TABLE h_id INT NOT NULL AUTO_INCREMENT tr

如何使用现有MySQL表中的信息填充新表。我有三个表,每个表都有一个键,我想将其包含在新表中,如下所示:

TRANSACTIONS TABLE
tr_id INT NOT NULL AUTO_INCREMENT
other columns
.
.

PEOPLE TABLE
p_id INT NOT NULL AUTO_INCREMENT
tr_id INT
other columns
.
.

HOLIDAYS TABLE
h_id INT NOT NULL AUTO_INCREMENT
tr_id INT
other columns
.
.

TRACKING TABLE
track_id INT NOT NULL AUTO_INCREMENT
tr_id
p_id
h_id
other columns
.
.
我甚至不确定我是否需要新表中的p_id和h_id列,因为我只需要能够从跟踪表中获取单个tr_id的所有行,但是它们可能有用,所以我可能会将它们留在那里。(我确实需要他们在新表中创建行,因为一个事务可以与前往多个假日目的地的多个人相关,并且跟踪表中的每一行必须与单个个人的单个目的地相关,因此对于每个前往相同2个假日目的地的2个人,跟踪表中将有4行)

我试过:

INSERT INTO tracking (tr_id, p_id, h_id) VALUES 
(SELECT t.tr_id, p.p_id, h.h_id
  FROM transactions t 
  JOIN people p 
  JOIN holidays h
  WHERE t.tr_id = p.tr_id 
    AND t.tr_id = h.tr_id);
但这给了我一个错误


谢谢你在这方面的建议。非常感谢。

出现语法错误。使用
Join
时,它后面跟着
ON
关键字,指定需要匹配的列。以下查询将起作用:

INSERT INTO tracking (tr_id, p_id, h_id) VALUES 
(SELECT t.tr_id, p.p_id, h.h_id
FROM transactions t 
JOIN people p 
on t.tr_id = p.tr_id
JOIN holidays h
on t.tr_id = h.tr_id)
您可以阅读更多关于
连接的信息

更新

这应该起作用:

INSERT INTO tracking (tr_id, p_id, h_id) 
SELECT t.tr_id, p.p_id, h.h_id
FROM transactions t 
JOIN people p 
on t.tr_id = p.tr_id
JOIN holidays h
on t.tr_id = h.tr_id
参考:


我提供的参考在查询中没有使用
value
关键字。奇怪的语法,但请告诉我是否有效。

您可以跳过select前面的值, 如果你想的话,你可以使用关键字“USING” 连接两个表中具有相同名称的列上的表。 我应该使用:

INSERT INTO tracking (tr_id, p_id, h_id)
SELECT tr_id, p_id, h_id
FROM transactions
LEFT JOIN people USING (tr_id)
LEFT JOIN holidays USING (tr_id)

您得到的错误是什么?还有,跟踪表上的主键是什么?mysql给了您什么错误?它通常有一个数字/错误id。错误1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解可在“SELECT t.tr_id,p.p_id,h.h”附近使用的正确语法_id@Joe我已经更新了答案并提供了参考。让我知道更新的语法是否有效。谢谢你的回答。我确信这是我所需要的,但每当我使用它时,我总是收到一条错误1064(42000)消息。奇怪的是,如果我只使用带有一些显式值的外部查询,它就会工作,如果我自己使用内部查询,我就会得到我要插入的值。@Joe
跟踪表中的其他列是什么?是否定义了任何其他列,使其不能包含空值?其次,在所有表中,
tr\u id、p\u id、h\u id
是否定义为
INT
?跟踪表中没有其他列(除了自动递增的跟踪id)。所有其他列都可以包含空值。所有的值都是INT(11)。不确定这里发生了什么。@乔,我用另一个问题更新了我的答案。你试过了吗?语法是稍微定制的。也提供了参考。让我知道,非常感谢。现在起作用了。真奇怪。我真的很感谢你的帮助,谢谢你花时间在这上面:)