4

私は2つのテーブルを持ってhelloおりlogin_table、以下はそれらの構造です

user_info
-------
some_id | name | address

login_table
-------
id | username | password

some_idおよびidは自動インクリメントインデックスです。

今、私はどのようにステートメントを使用できますINSERTINNER JOINSQL

現在、同じデータを以下に追加したいのですsome_idid

`name` = John
`address` = wall street
`username` = john123
`password` = passw123

以下のコードは、私がこれまでに試したことを示しています。

insert into login_table lt
INNER JOIN user_info ui ON ui.some_id = lt.id
(ui.name, ui.address, lt.username, lt.password) 
values
('John', 'wall street', 'john123', 'passw123')

そして、これは1つの値ではありません。一度に複数の値を追加したいのですが、どうすれば達成できますか。

手伝ってくれてありがとう。

4

3 に答える 3

11

INSERT2つの操作をアトミックに実行する必要がある場合は、トランザクションを使用します。

START TRANSACTION;
INSERT INTO login_table (username, password) VALUES ('john123', 'passw123');
INSERT INTO user_info (name, address) VALUES ('John', 'wall street');
COMMIT;

注意:これが機能するには、ストレージエンジンがトランザクションをサポートしている必要があります(例InnoDB)。

一度に複数の値をテーブルに挿入するには、の複数行形式を使用しますINSERTマニュアルに記載されているように:

INSERT構文を使用するステートメントは、VALUES複数の行を挿入できます。これを行うには、列値の複数のリストを含めます。各リストは括弧で囲まれ、コンマで区切られています。例:

INSERT INTO tbl_name(a、b、c)VALUES(1,2,3)、(4,5,6)、(7,8,9);

各行の値リストは括弧で囲む必要があります。リスト内の値の数が列名の数と一致しないため、次のステートメントは不正です。

INSERT INTO tbl_name(a、b、c)VALUES(1,2,3,4,5,6,7,8,9);

VALUEVALUESこのコンテキストではの同義語です。どちらも値リストの数については何も意味せず、単一の値リストまたは複数のリストがあるかどうかに関係なく使用できます。

于 2012-05-16T11:13:14.413 に答える
0

2つのテーブルに挿入することはできません。質問の2番目の部分が可能です。次のように1つのステートメントに複数の行を挿入できます。

insert into some_table(col1, col2) values (1,2), (3,4), (5,6);
于 2012-05-16T11:13:51.897 に答える
0
USE [ERPDb]
GO

INSERT INTO [AAA].[UserRole] ([UserId], [RoleId])
    SELECT u.Id, (SELECT Id FROM [AAA].[Role] WHERE Title = 'Employee') FROM [AAA].[User] u
        INNER JOIN [dbo].[BaseDealer] bd ON u.Id = bd.Id
    WHERE bd.DealerType = 0
GO
于 2021-12-16T12:40:26.237 に答える