我有两个表:Dictionary,Names。 两个表都有大量行(如200.000)。
词典中的列:id,word
名称中的列:id,name
我需要选择所有名称,即Dictionary.word + Dictionary.word(类似于同一列的串联,适用于所有变体)
另外,我需要快速查询,而不需要花费数小时才能加载... 关于这个速度 - 如果要求被设置为像“min 5 chars”这样的列/单词比较,我会很满意...
答案 0 :(得分:1)
这应该有效:
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`);
答案 1 :(得分:0)
这会尝试使用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);
答案 2 :(得分:0)
根本不确定速度:
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))
答案 3 :(得分:-1)
试试这个:
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`,`_%`)