内部连接SQL与like运算符

时间:2018-05-08 01:12:56

标签: sql postgresql performance

我的主表有一个搜索查询列。 一个简化的例子:

的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 :(得分: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,'[ ]%')