mysql喜欢含糊不清的结果

时间:2012-07-25 12:40:31

标签: mysql

我有两张桌子a和b。

表a有一个名为gr的字段,它可以有多个以字符串结合的值。

表b将其分别保存在字段lg。

如何运行以下查询以检查b.lg是否在a.gr?

现在b.lg有价值我,me01,me02和a.gr必须通过me02检查。

但这里的错误是三者与此匹配

SELECT lg 
FROM a, b 
WHERE a.id = 22 AND  
      a.gr LIKE CONCAT('%', b.lg, '%');

a.gr示例值

  1. 'M301,你,weall'

  2. '我,你,ME2'

  3. '我'

  4. b.lg值

    1.'m301'

    2.'you'

    3.'weall'

    4.'me2'

    5.'me'

    6.'me1'

2 个答案:

答案 0 :(得分:1)

您可以使用LOCATEFIND_IN_SET功能。 LOCATE将找到部分匹配;例如,它会在me中找到me1,me2的匹配项。如果这不是你想要的,也许你正在寻找FIND_IN_SET

SELECT lg 
FROM a, b 
WHERE a.id = 22 AND  
      LOCATE(b.lg, a.gr) > 0;

复制您发布的数据,这是SELECT的输出:

mysql> create temporary table a (gr varchar(100));
Query OK, 0 rows affected (0.36 sec)

mysql> create temporary table b (lg varchar(100));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into a values ('m301,you,weall'),('me,you,me2'),('me');
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into b values ('m301'),('you'),('weall'),('me2'),('me'),('me1');
Query OK, 6 rows affected (0.06 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> SELECT lg, gr  FROM a, b WHERE locate(lg,gr) > 0;
+-------+----------------+
| lg    | gr             |
+-------+----------------+
| m301  | m301,you,weall |
| you   | m301,you,weall |
| you   | me,you,me2     |
| weall | m301,you,weall |
| me2   | me,you,me2     |
| me    | me,you,me2     |
| me    | me             |
+-------+----------------+
7 rows in set (0.02 sec)

答案 1 :(得分:1)

我建议使用FIND_IN_SET()功能加入两个表格。

尝试这样的事情:

select b.lg
from a
inner join b on find_in_set(b.lg,a.gr) > 0
where a.id = 22;