带有 INNER JOIN 的两个表的 SQL INSERT 语句
Posted
技术标签:
【中文标题】带有 INNER JOIN 的两个表的 SQL INSERT 语句【英文标题】:SQL INSERT statement for TWO TABLES at time with INNER JOIN 【发布时间】:2012-05-23 22:32:07 【问题描述】:我有两张表hello
和login_table
,下面是它们的结构
user_info
-------
some_id | name | address
login_table
-------
id | username | password
some_id
和 id
是自增索引。
现在我如何在SQL
中使用INSERT
语句和INNER JOIN
目前,我想添加以下具有相同some_id
和id
的数据
`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')
这不是一个值,我想一次添加多个值..我怎样才能实现。
感谢您的帮助。
【问题讨论】:
我不认为这是可能的 - 你需要两个陈述 还有***.com/a/1382849/632951 【参考方案1】:如果您需要原子地执行两个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
的多行形式。如the manual中所述:
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);上一页>
VALUE
在此上下文中是VALUES
的同义词。两者都没有暗示值列表的数量,无论是单个值列表还是多个列表都可以使用。
【讨论】:
也将具有相同的id
即.. 在两个表中.. id
是自动递增的.. 我尝试并测试但它不起作用...
@Rafee 除了上述之外,当您需要在两个表中具有相同的 id 以防自动生成 id 时,您可以使用 LAST_INSERT_ID() 。 INSERT INTO foo (auto,text) VALUES(NULL,'text'); INSERT INTO bar (id,text) VALUES(LAST_INSERT_ID(),'text');
如何在这个查询中使用准备好的语句??【参考方案2】:
插入两个表是不可能的。您的问题的第二部分是可能的:您可以在一个语句中插入多行,如下所示:
insert into some_table(col1, col2) values (1,2), (3,4), (5,6);
【讨论】:
【参考方案3】: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
【讨论】:
以上是关于带有 INNER JOIN 的两个表的 SQL INSERT 语句的主要内容,如果未能解决你的问题,请参考以下文章
SQL语句(inner join,left out join,right out join三者的不同
SQL中inner join,outer join和cross join的区别
SQL语句中LEFT JOIN和RIGHT JOIN 以及INNER JOIN的区别