【问题标题】:MySQL how to fetch data from multiple table and insert into other?MySQL如何从多个表中获取数据并插入到其他表中?
【发布时间】:2021-08-09 08:11:47
【问题描述】:

我有 3 个数据库,我想从 2 个数据库中获取数据并插入另一个 1,但我在执行此操作时遇到了一些问题。

Database1 'first':表'items':

id name price
1 Crystal 30
2 Ruby 20

数据库 2“秒”:表“商店”:

id name items_id state
1 KK shop 1 NY
2 ABC Supermarket 2 AL

我需要从表 Items 中获取数据,然后使用表 Items 中的“id”在表 Shop 中搜索“name”。 然后我想将数据插入到表Details中。

这是它显示的样子,从空到这个:

数据库 3“第三”:表“详细信息”:

id items.id items.name shop.name
1 1 Crystal KK shop
2 2 Ruby ABC Supermarket

我的问题:

1) 既然我有 3 个数据库,我应该如何同时连接到所有这些数据库?我应该创建 3 个 php 文件来连接它们中的每一个,然后将其中的 3 个包含在同一个文件中吗?

2)如果我想将一个表中的所有列复制到另一个表中,我可以这样做吗?这会将所有列从“first.items”复制到“third.details”吗?

SELECT * from first.items
INSERT INTO third.details;

3)我的 SQL 查询,

SELECT * FROM first.items, 
SELECT name FROM second.shop 
WHERE first.items.id = 1, 
INSERT INTO third.details (id,items.id,items.name,shop.name) 
VALUES (1,first.items.id,first.items.name,second.shop.name);

执行查询后,我的表Details无法获取任何数据,这是什么问题?谢谢。

【问题讨论】:

  • 为什么要这样做?您似乎只是在生成冗余数据。
  • 您尝试过什么解决问题的方法?你被困在哪里了? “无法获取任何数据”是什么意思?

标签: php mysql


【解决方案1】:

当您需要插入从其他表中选择的某些表数据时,您可以使用下一种方法:

  • 首先:构建查询以选择应插入的数据。在你的情况下可以是下一个:

    SELECT 1, items.id, items.name, shop.name
    FROM first.items
    JOIN second.shop ON shop.id = items.id
    WHERE items.id = 1;
    
    
  • 第二个:将查询与INSERT 语句结合起来,例如:

    INSERT INTO third.details (id, items_id, items_name, shop_name) 
    SELECT 1, items.id, items.name, shop.name
    FROM first.items
    JOIN second.shop ON shop.id = items.id
    WHERE items.id = 1;
    

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
【解决方案2】:

重命名列:数据库 2“第二”:表“商店”: items.id 到 item_id

数据库 3 'third' : 表 'Details': 将 id 设置为自动增量

使用 join 合并前两个表:

SELECT items.id,items.name,shop.name FROM shop as shop left join items as items on items.id = shop.item_id WHERE items.id = 1, 

INSERT INTO third.details (items.id,items.name,shop.name) 
VALUES (first.items.id,first.items.name,second.shop.name);

【讨论】:

    【解决方案3】:
    1. 您的 INSERT INTO SELECT 语法放错了位置
    2. 为了将整个表插入另一个,两者必须共享兼容的列。计数和类型。

    表格看起来有点杂乱无章,但如果你想通过它,正确的查询应该如下所示

    INSERT INTO `third`.`Details` (`items.id`, `items.name`, `shop.name`)
    SELECT  `second`.`Shop`.items_id, `first`.`items`.name, `second`.`Shop`.name
    FROM `first`.`items`, `second`.`Shop`
    WHERE `second`.`Shop`.id = 1 and `first`.`item`.id = 1;
    

    还将 where 子句更改为

     `second`.`Shop`.id = `first`.`items`.id;
    

    应该允许您一次将所有条目插入到目标表中

    【讨论】:

    • 请在您的答案中添加一些解释,以便其他人可以从中学习
    • @NicoHaase 我刚刚在您发表评论时编辑了回复!
    • 您尚未解释您的查询。谁能了解为什么您的查询比最初的查询更有效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多