从多个表中插入到表中:INSERT INTO 表名

28

嗨,我有一个连接两个不相关表的联接表。这两个表都有ID。我需要使用不同的值使用WHERE从每个表中选择ID,例如:

INSERT INTO c (aID, bID)
VALUES (SELECT a.ID WHERE a.Name="Me", SELECT b.ID WHERE b.Class="Math");

我看到的所有示例都使用了 join 语句,但是这两个表没有一个共同的值,在这种情况下就不行。


你尝试过使用 SELECT ... INTO 吗? - Raptor
3个回答

62

尝试使用这个查询:

     INSERT INTO C (aID, bID) 
     SELECT A.ID, B.ID 
     FROM A, B 
     WHERE A.Name='Me'
     AND B.Class='Math';

好的,我会尝试一下,但是为什么要写成“FROM TableA a”,而不是直接写成“FROM a”呢? - user1670407
@Kosmo:我不知道A是你的表格,所以我使用了伪表名TableA并使用alias a引用了TableA。如果你的表格是A, B和C,那么使用INSERT INTO C...FROM A, B...。我已经更新了答案。 - Yogendra Singh
2
你是在尝试找到一个表中不在另一个表中的ID吗?如果它们没有关联,你如何将它们关联起来?现在先忘记插入组件,只需获取一个SELECT语句,返回所需的数据。上面的答案将给出数据的交叉连接。例如,如果A中有30个'Me'记录,B中有50个'Math'记录,则会得到1,500条记录。你期望获得多少条记录,并且它们应该如何在表之间进行关联? - Nick.McDermaid
1
7年前的答案仍然拯救了我的生命。简单易懂,非常感谢你,伙计。 - Viet Nguyen

9

另一种方法可以是

INSERT INTO c (aID, bID)
SELECT 
   (SELECT A.id FROM TableA A WHERE A.names = 'sometext'), 
   B.id FROM TableB B 
WHERE 
   B.x_name ='othertext';

7
假设给定的NameClass在每个表中只有一个值,最简单的方法是将子查询用()括起来:
INSERT INTO c VALUES (
(SELECT ID from a where Name='Me'),
(SELECT ID from b where Class ='Math')
)

在 dbfiddle 上的演示


我不知道7年前是否可能。但这是一个更干净,有时更快的解决方案,比已接受的方案更好。 - Lee
@Lee 我也不确定。但我正准备回答一个被关闭为重复的问题,所以我想我应该在这里发帖。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接