Mysql 在相等的子串上连接?

Mysql 在相等的子串上连接?,mysql,join,substring,Mysql,Join,Substring,我有一个关于游戏和价格的数据库,最近我在其中发现了另一个问题。有些游戏会在数据库中出现两次,一次是PC版,一次是Mac版。如果一个游戏有两个这样的版本,我的数据库中不需要mac版本。如果只有mac版本的游戏,我想保留它 这个问题对我来说简单了一点,因为所有同样有mac版本的游戏都会使用完全相同的名称,并在结尾加上一个小片段,表示它是为mac而设计的。这可能采用“Left 4 Dead 2(Mac)”、“Left 4 Dead 2 Mac”或“Left 4 Dead 2[Mac下载]”的形式 为了

我有一个关于游戏和价格的数据库,最近我在其中发现了另一个问题。有些游戏会在数据库中出现两次,一次是PC版,一次是Mac版。如果一个游戏有两个这样的版本,我的数据库中不需要mac版本。如果只有mac版本的游戏,我想保留它

这个问题对我来说简单了一点,因为所有同样有mac版本的游戏都会使用完全相同的名称,并在结尾加上一个小片段,表示它是为mac而设计的。这可能采用“Left 4 Dead 2(Mac)”、“Left 4 Dead 2 Mac”或“Left 4 Dead 2[Mac下载]”的形式

为了尝试查找这些条目,我创建了以下查询:

SELECT *
FROM `gamelist` g1
JOIN `gamelist` g2
ON
    SUBSTR(g1.`title`,0,20) = SUBSTR(g2.`title`,0,20)
    AND
    g1.`title`<>g2.`title`
WHERE
    (g1.`amazon_id` IS NOT NULL AND g2.`amazon_id` IS NOT NULL)
    OR (g1.`steam_id` IS NOT NULL AND g2.`steam_id` IS NOT NULL)
    OR (g1.`impulse_id` IS NOT NULL AND g2.`impulse_id` IS NOT NULL)
    ...
选择*
来自“游戏列表”g1
加入“游戏列表”g2
在…上
SUBSTR(g1.`title`,0,20)=SUBSTR(g2.`title`,0,20)
及
g1.`title`g2.`title`
哪里
(g1.`amazon_id`不为空,g2.`amazon_id`不为空)
或者(g1.`steam_id`不为空,g2.`steam_id`不为空)
或者(g1.`pulse_id`不为空,g2.`pulse_id`不为空)
...
这个想法应该相当直截了当。问题是
SUBSTR()
似乎根本不起作用。在一个有大约8000个条目的数据库中,它返回了大约6400万个结果。显然,它完全跳过了
SUBSTR(g1.title,0,20)=SUBSTR(g2.title,0,20)
行,并随时加入行
g1.titleg2.title

如何在这样的相等子字符串上进行连接?

SUBSTR(),以您使用它的方式,是一个索引,而不是零索引。你想要

SUBSTR(g1.`title`,1,20) = SUBSTR(g2.`title`,1,20)

+一个好地方。为清楚起见,这不是跳过,而是编码错误。