【问题标题】:Join on equal substring?加入相等的子字符串?
【发布时间】:2011-12-09 10:55:13
【问题描述】:

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

这个问题对我来说有点简单,因为所有也有 mac 版本的游戏都将使用完全相同的名称加上最后的小 sn-p 来表示它是为 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)
    ...

这个想法应该相当简单。问题是SUBSTR() 似乎根本不起作用。在一个包含大约 8,000 个条目的数据库中,它返回了大约 6400 万个结果。显然,它完全跳过了SUBSTR(g1.title,0,20) = SUBSTR(g2.title,0,20) 行并随时加入行g1.title&lt;&gt;g2.title

我怎样才能加入这样的相等子字符串?

【问题讨论】:

    标签: mysql join substring


    【解决方案1】:

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

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

    【讨论】:

    • +1 好地方。为清楚起见,这不是跳过,而是编码错误。
    猜你喜欢
    • 2019-06-22
    • 2021-02-13
    • 1970-01-01
    • 2014-03-03
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多