我有两张桌子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示例值
'M301,你,weall'
'我,你,ME2'
'我'
b.lg值
1.'m301'
2.'you'
3.'weall'
4.'me2'
5.'me'
6.'me1'
答案 0 :(得分:1)
您可以使用LOCATE
或FIND_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;