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

时间:2011-08-09 12:15:10

标签: 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_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);

但是这给了我一个错误。

感谢任何关于此的建议。非常感谢。

2 个答案:

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

参考:MySQL Insert & Joins

我提供的引用未在查询中使用VALUES关键字。奇怪的语法,但如果有效,请告诉我。