ちょっと私は次のクエリを使用して新しいレコードを挿入する方法を見つけようとしています:
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);
選択する列について具体的に説明する必要があります。 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_permission
に対して結合する理由はないようです。これは、そのテーブルの列がuser
に挿入されないためです。実際、このINSERT
は主キーの一意性違反で失敗する可能性があります。
MySQLは、複数のテーブルへの同時挿入をサポートしていません。最初のクエリの最後の挿入IDを使用して、コードで2つのINSERT
ステートメントを実行するか、プライマリテーブルで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
別のVALUES
クエリを使用してデータを挿入するときは、SELECT
句を使用できません。 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
);
INSERT INTO Test([col1],[col2]) (SELECT a.Name AS [col1],b.sub AS [col2] FROM IdTable b INNER JOIN Nametable a ON b.no = a.no)