MySQL单词+单词搜索

MySQL单词+单词搜索,mysql,search,select,concatenation,Mysql,Search,Select,Concatenation,我有两张桌子:字典,名字。 两个表都有大量行,如200.000行 字典中的列:id,word 名称中的列:id,name 我需要选择所有属于Dictionary.word+Dictionary.word的名称,例如相同列的串联,用于所有变体 另外,我需要快速查询,而不是需要几个小时才能加载的东西。。。 关于这个速度-如果将列/字比较的要求设置为最小5个字符,我会感到满意…试试这个: SELECT * FROM `Names` `n` INNER JOIN `Dictionary` `d` ON

我有两张桌子:字典,名字。 两个表都有大量行,如200.000行

字典中的列:id,word

名称中的列:id,name

我需要选择所有属于Dictionary.word+Dictionary.word的名称,例如相同列的串联,用于所有变体

另外,我需要快速查询,而不是需要几个小时才能加载的东西。。。 关于这个速度-如果将列/字比较的要求设置为最小5个字符,我会感到满意…

试试这个:

SELECT * FROM `Names` `n`
INNER JOIN `Dictionary` `d`
ON `d`.`word` IS NOT NULL
AND (`n`.`name` LIKE CONCAT(`d`.`word`,`d`.`word`));
更新:

SELECT * FROM `Names` `n`
INNER JOIN `Dictionary` `d1`
INNER JOIN `Dictionary` `d2`
        ON `n`.`name` = CONCAT(`d1`.`word`,`d2`.`word`) 
        OR `n`.`name` LIKE CONCAT(`d1`.`word`,`_%`) 
        OR `n`.`name` LIKE CONCAT(`d2`.`word`,`_%`)
这应该起作用:

SELECT `N`.`name`
FROM `Names` `N`
INNER JOIN `Dictionary` `D` ON `N`.`name` = CONCAT(`D`.`word`, `D`.`word`);
新查询:

SELECT `N`.`name`
FROM `Names` `N`
INNER JOIN `Dictionary` `D`
INNER JOIN `Dictionary` `D1`
WHERE `N`.`name` = CONCAT(`D`.`word`, `D1`.`word`);

这将尝试使用d.word上的索引获取答案

SELECT *
FROM Names n
JOIN Dictionary d1
JOIN Dictionary d2
WHERE 
    LEFT(n.name, LENGTH(n.name)/2) = d1.word
AND RIGHT(n.name, LENGTH(n.name)/2) = d2.word
AND n.name = CONCAT(d1.word, d2.word);

根本不确定速度:

SELECT n.*
FROM Names AS n
  JOIN Dictionary AS d1
    ON n.name LIKE CONCAT(d1.word, '%')
  JOIN Dictionay AS d2
    ON d1.id <= d2.id
WHERE n.name = CONCAT(d1.word, d2.word))

@Darko:请确保你在Names.name和Dictionary.word列上有正确的索引,但是,所有这些答案只给出由相同单词+单词组成的名称的结果。。。仅选择JohnJohn和类似产品。我也需要约翰豪斯。。。你知道我的意思吗?工作很好。但是,所有这些答案只给出了由相同单词+单词组成的名称的结果。。。仅选择JohnJohn和类似产品。我也需要约翰豪斯。。。你知道我的意思吗?噢。我不知道那是你想要的。1秒。但是,所有这些答案只给出由相同单词+单词组成的名称的结果。。。仅选择JohnJohn和类似产品。我也需要约翰豪斯。。。你知道我的意思吗?我认为这个查询也会匹配John@Abhay:是的,他就是这么问的。@Shef:我认为Darko需要单词+单词,例如JohnJohn或JohnHouse,从标题上看也是如此。我不确定他是否也需要John@Abhay,@Darko:Added uz%,将匹配约翰+一个角色。如果只是约翰,那就不匹配了