2011-08-09 48 views
1

如何使用現有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); 

但是這是給我的錯誤。

感謝您對此的任何建議。非常感謝。

+0

你正在得到什麼錯誤?跟蹤表上的主鍵是什麼? –

+0

mysql給你什麼錯誤?它通常有一個數字/ error_id。 – ace

+0

錯誤1064(42000):您的SQL語法錯誤;檢查與你的MySQL服務器版本相對應的手冊,在'SELECT t.tr_id,p.p_id,h.h_id – Joe

回答

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

UPDATE

這應該工作:

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關鍵字。奇怪的語法,但讓我知道如果這有效。

+0

感謝您的回答。我確信這是我所需要的,但是每當我使用它時,我都會收到一條ERROR 1064(42000)消息。奇怪的是,如果我只是使用帶有某些顯式值的外部查詢,並且如果我使用它自己的內部查詢,則會得到我想要插入的值。 – Joe

+0

@Joe'跟蹤'表中的其他列是什麼?是否定義了其他任何列,例如它們不能包含空值?其次,在所有表中,「tr_id,p_id,h_id」是否定義爲「INT」? – reggie

+0

跟蹤表中沒有其他列(除了自動遞增的track_id)。所有其他列可以包含空值。所有的值都是INT(11)。不知道這裏發生了什麼。 – Joe

2

如果您希望 將兩個表中名稱相同的列上的表連接起來,則可以跳過選擇的值infront, ,並且可以使用關鍵字「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) 
相關問題