两个字符串之间的SQL通配符

时间:2015-04-22 18:35:54

标签: mysql

假设您有两个表:

            table1                         table2
       id | cityA | cityB              id | cities_queue|
        1     a        c                1    a , b , d
        2     s        f                2    a , b , c ,e
        3     d        m                3    a , m , d , e

我想仅返回包含cityA和cityB的表2的那些行,具有此特定顺序,第一个cityA和after(某处...)来到cityB。 因此,唯一可接受的结果必须是(a,b,c,e)。首先想到的是使用LIKE命令查找哪个table2行包含cityA,然后使用substr()仅接收cityA之后的一部分cities_queue,并再次使用LIKE()为cityB。所以我的问题是:是否可以只使用一次LIKE()保存为类似

的字符串
 (cityA) - % - (cityB)          

其中%=通配符 查找包含cityA和cityB的所有cities_queue,无论它们之间是什么;如果是,请提供正确的语法。感谢

2 个答案:

答案 0 :(得分:1)

不确定您的观点是什么,但是如果元素的顺序非常重要:

http://sqlfiddle.com/#!9/83459/7

SELECT t2.*
FROM table2 t2
INNER JOIN table1 t1
ON t2.cities_queue LIKE CONCAT('%',t1.cityA,' , ',t1.cityB,'%')

SELECT t2.*
FROM table2 t2
INNER JOIN table1 t1
ON t2.cities_queue LIKE CONCAT('%',t1.cityA,' % ',t1.cityB,'%')

答案 1 :(得分:0)

与@ Alex相似,但我选择regex

SELECT *
FROM table2 t2
INNER JOIN table1 t1
ON t2.cities_queue regexp CONCAT(t1.cityA,'.*',t1.cityB)

http://sqlfiddle.com/#!9/83459/3