Внутреннее соединение SQL с оператором like - PullRequest
0 голосов
/ 08 мая 2018

У меня есть главная таблица, в которой есть столбец для поискового запроса. Упрощенный пример:

QueryTable

id   query
1    hello new york
2    no information here
3    madison festival 

Geotable

id   suburb     postcode
11    new york   123
12    brooklyn   345
13    madison    999

Если поисковый запрос имеет местоположение, я хочу получить почтовый индекс в примере результата следующим образом:

id     query             suburb      postcode
1      hello new york    new york    123
3      madison festival  madison     999

В настоящее время я делаю это через SQL и возвращает желаемый результат (почти: с ошибками, такими как, если `inform '- это пригород, он будет получен, хотя мы хотим сопоставить полные слова).

SELECT QT.id, query, suburb, postocde
FROM Querytable as QT
INNER JOIN Geotable ON query LIKE concat('%',suburb,'%');

Поскольку вышеприведенные таблицы велики, как я могу улучшить этот запрос? Или есть лучший способ решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Я внес некоторые изменения в ваш запрос и дал желаемый результат для меня. Попробуйте это.

SELECT QT.id, query, suburb, postcode
FROM Querytable as QT
INNER JOIN Geotable ON concat(query,Space(1)) LIKE concat('%',suburb,'[ ]%')
0 голосов
/ 08 мая 2018

из вашей таблицы, я думаю, что JOIN должен быть в столбце ID, а ваш LIKE должен быть в WHERE, а не в JOIN. так как то так вместо

SELECT QT.id, query, suburb, postocde
FROM Querytable as QT
INNER JOIN Geotable GT ON QT.id=GT.id 
WHERE query LIKE concat('%',suburb,'%');

но даже при этом, если `inform 'является пригородом, он будет извлечен, так как он соответствует условию'% inform% '. у вас есть индекс в этой таблице для повышения производительности? в какой колонке вы положили индексы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...