Mysql 将每个id中的外键数与另一个数据库进行比较

Mysql 将每个id中的外键数与另一个数据库进行比较,mysql,sql,Mysql,Sql,有两个结构相同的数据库。 每个数据库中都有这两个表 -表“客户端” +----+-----------------+-----------------+ | id | name | document | +----+-----------------+-----------------+ +----+-----------------+-----------------+ | id | id_client | product |

有两个结构相同的数据库。
每个数据库中都有这两个表

-表“客户端”

+----+-----------------+-----------------+
| id | name            | document        |
+----+-----------------+-----------------+
+----+-----------------+-----------------+
| id | id_client       | product         |
+----+-----------------+-----------------+

-表“采购”

+----+-----------------+-----------------+
| id | name            | document        |
+----+-----------------+-----------------+
+----+-----------------+-----------------+
| id | id_client       | product         |
+----+-----------------+-----------------+

我想知道如何在第三个数据库(db3)中插入所有在db1和db2中相同且具有相同数量外键的客户机。

逻辑上应该是这样的:

在db3.clients中插入来自db1.clients和db2.clients的相等clients行,其中count(db1.Purchases.id_client)=count(db2.Purchases.id_client)

您可以使用一组连接来选择

  • db1和db2中的客户机

  • db1中每个客户的购买量

  • db2中具有相同购买量的客户机

  • 然后,只需使用INSERT语句插入这些选定行,如下所示:

    INSERT INTO db3.clients
    SELECT c1.*
    FROM db1.clients c1
    INNER JOIN db2.clients c2
    ON c1.id = c2.id
    INNER JOIN 
    (
        SELECT 
            id_client,
            count(*) cnt_purchases
        FROM db1.Purchases
        GROUP BY id_client
    ) p1
    ON c1.id = p1.id_client
    INNER JOIN
    (
        SELECT 
            id_client,
            count(*) cnt_purchases
        FROM db2.Purchases
        GROUP BY id_client
    ) p2
    ON p1.id_client = p2.id_client AND p1.cnt_purchases = p2.cnt_purchases;
    

    非常感谢,这太棒了:)Joseph B,如果相同客户机的ID在两个dbs上都不同怎么办?就像客户机Johnny在db1上的ID为3,但在db2上的ID为6一样,在这种情况下,您将在db3中得到两个ID不同但名称相同的行。如果要使用名称进行比较,那么如果发现db1和db2之间存在匹配,则需要知道要插入到db3中的id。