2012-01-20 19 views
-3

私はSQLで新しいです。私は疑いがある。私は2つのテーブルを持っているとしましょう。 1つはユーザーと呼ばれ、もう1つはオーダーです。Mysql。クエリは別のテーブルに関連するテーブルにデータを挿入する

User 
User_Id - name - email 

Order 
Order_id - product - User_id 

何クエリ私はユーザテーブル(既存ユーザー)

例:からUSER_IDに関連USER_IDフィールドを使用して、注文テーブルに新しい秩序を挿入するために使用する必要があります。

Order_id - product - User_id 
1a - plate - 1 
2a - car - 3 
3a - bike - 1 
+3

まず、書籍を読んで、試してみてください。あなたがすべてを試しても失敗したときだけ、あなたはここに来て尋ねます。 –

+0

インターネットには無数のチュートリアルがあります。ちょうど5秒の検索を行い、この詳細な説明を思いついた。 http://www.sql-tutorial.com/relations-keys-normalization-sql-tutorial/ – allingeek

+0

@allingeek - 5秒ではなく10秒を要した場合は、このリンクが質問に答えていないことがわかりました。単に正規化について説明します。 OPのテーブルは既に正規化されています。彼らは正しいユーザーIDが渡されることを保証しながらordersテーブルにデータを挿入する方法を尋ねていました。これは、Vaanduの明確な答えが示すように、非常に良い質問です。それらのメソッドは良い解決策ですが、NAMEはuser_idが見つかる可能性のあるuserテーブル内の一意の値であると想定しています。しかし、NAMEが一意の場合、テーブルユーザーは最初にuser_idは必要ありません。 – user3209752

答えて

1

ユーザーのnameまたはemailがある場合は、これを試すことができます。 USERがuser_idname列に複合主キーを持っている場合、問題なく動作します。 user_id列の外部キーの関係をORDERにすることをお勧めします。

例にはNAME列があり、電子メール列でも試すことができます。

INSERT INTO ORDER (ORDER_ID, PRODUCT, USER_ID) 
VALUES (1a, 'plate', (SELECT USER_ID FROM USER WHERE NAME = 'Existing user')); 

EDIT:

私が唯一のOracle SQLに取り組んできました。あなたのコメントの後、このリンクが見つかりました。

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

あなたがORDER_ID列にAUTO_INCREMENTを定義している場合は、値を渡す必要はありません。

INSERT INTO ORDER (PRODUCT, USER_ID) 
VALUES ('plate', (SELECT USER_ID FROM USER WHERE NAME = 'Existing user')); 
+0

order_idが自動的に増分する場合は、jeedを使用して値を渡すことはできません。 – Camus

0

標準のSQLインサートを使用します。

insert into Order (Order_id, product, User_id) values ("3a", "bike", 1) 

あなたのテーブルがプロパティを設定している場合は、User_idフィールド上の外部キー制約がありますので、ご注文を挿入しようとしたが、有効な人物を参照しない場合、MySQLはエラーをスローします。

0
INSERT order (Order_id, product, User_id) VALUES (1a,plate,1) 

外部キーは、それが作成された後、それはテーブルが作成されたときに設定するか、ALTER TABLEクエリを経由されているはずのインサートで使用されるSQLとは何の関係もありません。

0

テーブル間の関係は、テーブルの作成時にFOREIGN KEYを使用して定義されます。

CREATE TABLE Users(
    UserId int primary key 
); 

CREATE TABLE Orders(
    OrderId int primary key, 
    UserId int FOREIGN KEY REFERENCES Users(UserId) 
); 

次に、あなたのような単純な挿入でください:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

INSERT INTO ORDER(OrderId, UserId) VALUES(1, 5); 

は、ここに外部キー制約のドキュメントを見てみましょう。

+0

私は理解しました。私の疑問は、私が注文を作成するときです。どのように特定のユーザーとその注文を参照することができます。 vanathi氏のように、ユーザーIDを手動でコード化するか選択する必要がありますか? – Camus

関連する問題