MySQL - 从多列的搜索中返回匹配的文本

时间:2014-02-22 08:17:40

标签: mysql

假设我有一个如下表:

Ref|Start point|End point
-------------------------
  1|Narva      |Tallinn
  2|Tartu      |Viljandi
  3|Pärnu      |Tartu
  4|Tartu      |Jõgeva

这里有两列包含地名。现在我想在两列中搜索匹配某些模式的地名并返回匹配的地名,这意味着:

  • 搜索'Ta%'=>返回塔林,塔尔图
  • 搜索'%va'=>返回纳尔瓦,Jõgeva

有没有办法用一些合适的MySQL查询来实现这个目的?表的结构是固定的,因为我需要在现有数据库上运行此搜索。但是我可以创建临时表,如果这会有所帮助。

编辑:为了澄清,我想获得一个匹配地名列表,匹配行列表。因此,此类型的查询不会产生所需的结果:

SELECT * FROM routes WHERE start_point LIKE '%va' OR end_point LIKE '%va'

此查询将返回如下内容:

  • 1,纳尔瓦,塔林
  • 4,Tartu,Jõgeva

但我更愿意:

  • 纳尔瓦
  • 约格瓦

3 个答案:

答案 0 :(得分:0)

1. select Ref,Start_Point,End_point from table where Start_point like 'Ta%' or End_point like 'Ta%'
2. select Ref,Start_Point,End_point from table where Start_point like '%va' or End_point like '%va'

答案 1 :(得分:0)

试试这个

SELECT distinct t1.startpoint, t2.endpoint
FROM `yourtablename` AS t1, ( 
    SELECT *
    FROM `yourtablename`
    WHERE endpoint LIKE 'Ta%'
) AS t2
WHERE t1.startpoint LIKE 'Ta%'
and t1.startpoint <> t2.endpoint
group by t1.startpoint, t2.endpoint

答案 2 :(得分:0)

你可以为它运行2个查询

<强> 1)

SELECT start_point FROM routes WHERE start_point LIKE '%va' 

<强> 2)

SELECT end_point FROM routes WHERE end_point LIKE '%va'

第一个将提供startpoint的输出,第二个将提供endpoint的输出

更新:

到RUN将两者结合起来,你可以像这样使用UNION

SELECT start_point FROM routes WHERE start_point LIKE '%va'
UNION
SELECT end_point FROM routes WHERE end_point LIKE '%va'