挿入

2012-08-22 7 views
27

ねえ、私はVB.netで、次のクエリ文字列を使用して、新しいレコードを挿入するに取り掛かる方法を把握しようとしていますすべて:挿入

SELECT user.id, user.name, user.username, user.email, 
    IF(user.opted_in = 0, 'NO', 'YES') AS optedIn 
FROM 
    user 
    LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id 
ORDER BY user.id; 

マイINSERTクエリはこれまでです:

INSERT INTO user 
SELECT * 
FROM user 
    LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id; 

ただし、私は左と内の結合を使用するときにVALUE('','','','', etc etc)を実行する方法がわかりません。

Userテーブル:

id | name  | username | password     | OptIn 
-------------------------------------------------------------------- 
562  Bob Barker bBarker  [email protected] 1 

user_permissionテーブルこのようなので

user_id | Permission_id 
------------------------- 
562   4 

UPDATE

だから私はやって探しています何がこのですか?

INSERT INTO user (name, username, password, email, opted_in) VALUES ('Bbarker','Bbarker','blahblahblah','[email protected]',0); 
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(),4); 
+0

「user」から値を選択したときに、なぜ「user」に挿入されますか?挿入する新しい行は何ですか? –

答えて

29

選択している列について具体的に説明する必要があります。 userテーブルに4列あるid, name, username, opted_inがある場合は、クエリから4つの列を正確に選択する必要があります。構文は次のようになります。

INSERT INTO user (id, name, username, opted_in) 
    SELECT id, name, username, opted_in 
    FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id 

しかし、そのテーブルの列のどれもがuserに挿入されないであろうことから、ここでuser_permissionに対して参加する理由があるように表示されません。実際、このINSERTは、主キーの一意性違反で失敗するように見えます。

MySQLは、複数のテーブルへの挿入を同時にサポートしていません。コード内に2つのINSERTステートメントを実行するか、最初のクエリの最後の挿入IDを使用するか、またはプライマリテーブルにAFTER INSERTトリガを作成する必要があります。

INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0); 
/* Gets the id of the new row and inserts into the other table */ 
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4) 

またはtriggerを使用して:

CREATE TRIGGER creat_perms AFTER INSERT ON `user` 
FOR EACH ROW 
BEGIN 
    INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4) 
END 
+0

私はuser_permissionテーブルの行をユーザテーブルの横に挿入する必要があります。どうすればいい? – StealthRT

+0

私は何を探していたのかをよく説明するためにOPを更新しました。 – StealthRT

+0

@StealthRT複数のステートメントがない2つのテーブルに新しい行を挿入することも、最初のテーブルにトリガーを挿入することもできません。 –

15

SELECTのクエリを使用してデータを挿入するときに、あなたがVALUES句を使用することはできません。 INSERT SYNTAX

INSERT INTO user 
(
id, name, username, email, opted_in 
) 
(
    SELECT id, name, username, email, opted_in 
    FROM user 
     LEFT JOIN user_permission AS userPerm 
      ON user.id = userPerm.user_id 
); 
+0

答えを返す時間をとってくれてありがとう、Omesh! – StealthRT