如何使用现有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);
但是这给了我一个错误。
感谢任何关于此的建议。非常感谢。
答案 0 :(得分:2)
您可以跳过选择前面的值, 如果您愿意,可以使用关键字“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)
答案 1 :(得分:1)
存在语法错误。当您使用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)
您可以详细了解JOINS
超过here
<强>更新强>
这应该有效:
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
我提供的引用未在查询中使用VALUES
关键字。奇怪的语法,但如果有效,请告诉我。