4

我有两张桌子hellologin_table下面是它们的结构

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

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

some_id并且id是自增索引。

现在我如何在 in 中使用INSERT语句INNER 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')

这不是一个值,我想一次添加多个值.. 我怎样才能实现。

感谢帮助。

4

3 回答 3

11

如果您需要INSERT原子地执行这两个操作,请使用事务:

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

插入两个表是不可能的。您问题的第二部分是可能的:您可以在一个语句中插入多行,如下所示:

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 回答