我的主表有一个搜索查询列。 一个简化的例子:
的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,'%');
由于上面的表很大,我该如何改进这个查询?或者有更好的方法来解决这个问题吗?
答案 0 :(得分:0)
从你的表中,我认为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%'的条件。你在该表中有索引来提高性能吗?你把索引放在哪一列?
答案 1 :(得分:0)
我在您的查询中做了一些更改,并为我提供了所需的结果。试试这个。
SELECT QT.id, query, suburb, postcode
FROM Querytable as QT
INNER JOIN Geotable ON concat(query,Space(1)) LIKE concat('%',suburb,'[ ]%')