Php MySQL:如何从一个不带';不存在基于不同列的另一个?

Php MySQL:如何从一个不带';不存在基于不同列的另一个?,php,mysql,Php,Mysql,我正在为一个非常简单的MMORPG开发后端。我使用PHP和MySQL,我有以下表格: characters ---------- id,charactername,country,server,guild,xp,level,etc.. guilds ------ id,guildname,country,server 我要寻找的是一种从characters表中收集所有独特的公会的方法,找出哪些公会不在公会表中,并更新公会。棘手的部分似乎是,同一名称的公会可以存在于不同的国家/服务器组合中。以

我正在为一个非常简单的MMORPG开发后端。我使用PHP和MySQL,我有以下表格:

characters
----------
id,charactername,country,server,guild,xp,level,etc..

guilds
------
id,guildname,country,server
我要寻找的是一种从characters表中收集所有独特的公会的方法,找出哪些公会不在公会表中,并更新公会。棘手的部分似乎是,同一名称的公会可以存在于不同的国家/服务器组合中。以下是一些有效的公会条目示例,以表明它们并不冲突:

21,"Hardworking Ogres","uk","development"
3151,"Hardworking Ogres","us","development"
231,"Hardworking Ogres","us","live"
因此,我有一个关于行会名称、国家和服务器的唯一索引的行会表,它运行良好,因此我不会覆盖条目。我以前一直在将所有的公会/国家/服务器从characters表独立转储到多维数组中。然后从公会表中转储现有公会/国家/服务器的列表。然后,我运行一个类似于array_diff的函数来获取行会表中不存在的唯一行会的列表,并运行一个INSERT查询来更新它

我相信MySQL中有一种更简单的方法可以返回公会表中不存在的公会/国家/服务器组合的唯一列表,然后运行insert节省时间查询2个大规模MySQL请求,然后比较它们。我只是不知道下一步该看哪里,所以我的问题是:在MySQL中有没有实现这一点的方法

SELECT DISTINCT
    c.country, c.server, c.guild
FROM 
    characters AS c
WHERE
    NOT EXISTS
    ( SELECT *
      FROM guilds AS g
      WHERE g.country = c.country
        AND g.server = c.server
        AND g.guildname = c.guild
    ) ;
在运行查询之前:

如果
行会
中的索引是
(国家、服务器、行会名称)
,请在
字符上添加索引(非唯一),列的顺序相同。

您可以使用简单的
左连接
,并检查
行会.id
空的位置:

SELECT DISTINCT
    ch.country,
    ch.server,
    ch.guild
FROM
    `characters` as `ch`
LEFT JOIN
    `guilds` as `gu`
ON
    (gu.guild = ch.guild AND gu.server = ch.server AND gu.country = ch.country)
WHERE
    gu.id IS NULL

Ypercur的答案可能对我有用,谢谢你的输入。