【问题标题】:INSERT INTO Table from multiple tables从多个表中插入表
【发布时间】:2012-11-06 04:39:53
【问题描述】:

嘿,所以我有一个连接两个不相关表的连接表。这两个表都有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 吗?

标签: mysql sql


【解决方案1】:

试试这个查询:

     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”
  • @Kosmo:我不知道A 是你的表,所以我使用了一个伪表名作为TableA,并使用alias a 引用了TableA。如果您的表是A, B & C,则使用INSERT INTO C...FROM A, B...。我更新了答案。
  • 您是否要在其中一个中查找 ID,而另一个中没有?如果它们不相关,你怎么能把它们联系起来?现在忘记插入组件,只需获取返回所需数据的 SELECT 语句。上面的答案将为您提供数据的交叉连接。即,如果 A 中有 30 条“我”记录,B 中有 50 条“数学”记录,那么您将获得 1,500 条记录。您希望获得多少条记录,它们应该如何在表之间关联?
  • 7 年的答案仍然可以挽救我的生命。很简单,很容易理解。谢谢,伙计。
【解决方案2】:

另一种方式可以是

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';

【讨论】:

    【解决方案3】:

    假设给定的NameClass 在每个表中只有一个值,最简单的方法就是将您的子查询包含在() 中:

    INSERT INTO c VALUES (
    (SELECT ID from a where Name='Me'),
    (SELECT ID from b where Class ='Math')
    )
    

    Demo on dbfiddle

    【讨论】:

    • 我不知道这在 7 年前是否可行。但作为公认的解决方案,它是一种更清洁、有时更快的解决方案。
    • @Lee 我也不确定。但我正要发布这个问题的答案,这个问题因为这个问题而被关闭,所以我想我应该在这里发布。
    猜你喜欢
    • 1970-01-01
    • 2019-07-11
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多