0

我有两张桌子a和b。

表 a 有一个名为 gr 的字段,该字段可以有多个包含字符串的值。

表 b 将其单独保存在字段 lg 中。

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

现在 b.lg 有值 me,me01,me02 并且 a.gr 必须检查 agist me02。

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

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

a.gr 示例值

  1. 'm301,你,好吧'

  2. '我,你,我2'

  3. '我'

b.lg 值

1.'m301'

2.'你'

3.“好”

4.'我2'

5.“我”

6.'我1'

4

2 回答 2

1

您可以使用LOCATEFIND_IN_SET功能。LOCATE 将找到部分匹配项;例如,它将找到 in 的匹配meme1,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)
于 2012-07-25T12:55:20.260 回答
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;
于 2012-07-25T14:44:53.973 回答