2011-08-09 9 views
1

既存のMySQLテーブルの情報を使用して新しいテーブルを作成する方法を教えてください。私ので、私は新しいテーブルでP_IDとh_id列を必要とすることさえわからないMySQL - 3つの既存のテーブルのキーを使用して新しいテーブルを作成する

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 
. 
. 

:私はそうのような新しいテーブルに含めるというキーを持っているそれぞれの3つのテーブルを持っています単一のtr_idのトラッキングテーブルからすべての行を取得するだけで済むようにする必要がありますが、それらが有用になる可能性があるので、それらをそこに残すことがあります。 (1つのトランザクションが複数の休日の宛先に行く複数の人に関連し、トラッキングテーブルの各行が1人の単一の宛先に関連しているので、新しいテーブルに行を作成する必要があります。同じ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があなたに与えるエラーは何ですか?これは通常、number/error_idを持ちます。 – ace

+0

ERROR 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) 

あなたはhere

UPDATE上JOINS詳細を読むことができ

これは動作するはずです:

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 'tracking'テーブルの他の列は何ですか?他の列のいずれかがNULL値を含むことができないように定義されていますか?次に、 'tr_id、p_id、h_id'はすべてのテーブルで' INT'として定義されていますか? – reggie

+0

トラッキングテーブルに他の列はありません(自動増分されたtrack_idは別です)。他のすべての列には、NULL値を入れることができます。すべての値は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) 
関連する問題