MySQL слово + поиск слова - PullRequest
0 голосов
/ 21 июня 2011

У меня есть две таблицы: словарь, имена. Обе таблицы имеют большое количество строк (например, 200.000).

Столбцы в словаре: id, word

столбцы в именах: id, name

Мне нужно выбрать все имена, которые являются Dictionary.word + Dictionary.word (что-то вроде конкатенации одного столбца для всех вариантов)

Кроме того, мне нужен быстрый запрос, а не что-то, что заняло бы часы, чтобы загрузить ... Об этой скорости - я был бы удовлетворен, если бы для сравнения столбца / слова были установлены требования, например, "минимум 5 символов" ...

Ответы [ 4 ]

1 голос
/ 21 июня 2011

Это должно работать:

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`);
0 голосов
/ 21 июня 2011

Не уверен насчет скорости вообще:

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))
0 голосов
/ 21 июня 2011

пытается получить ответ, используя индекс 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);
0 голосов
/ 21 июня 2011

Попробуйте это:

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`,`_%`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...