具有替换的子查询无法在WHERE子句中识别

时间:2019-11-22 02:14:39

标签: mysql

问题是我想将使用子查询的SELECT结果放在A_table A_LIST列中 where子句,以便它们可以匹配A_TABLE'A_List'和B_TABLE'userList'

A_TABLE

+-------+----------+
| A_LOG |  A_List  |
+-------+----------+
| WQ-83 |    a     |
| WQ-82 |    b     |
| WQ-89 |    c     |
| WQ-85 |    d     |
| WQ-86 |    e     |
| WQ-81 |    f     |
+-------+----------+ 

B_TABLE

+----------+--------------------+
| userName |     userList       |
+----------+--------------------+
| A_PERSON | ['a','b','c','d']  |
| B_PERSON | NULL               |
+----------+--------------------+

b.table数据看起来像 ['a','b','c','d'] (列名-> userList)在同一列中,所以我使用replace来解析上下文

SELECT replace(replace(userList,'[',''),']','') from Btable

结果看起来像-> 'a','b','c','d',然后将此选择查询放入子查询中 A.table列表列数据在每列中看起来都像a,b,c

SELECT A_List  from A_TABLE where A_List IN(
SELECT replace(replace(userList,'[',''),']','') from B_TABLE
)

但是此查询结果返回0个数据

所以我尝试

SELECT  A_List  from A_TABLE where A_List IN( 'a','b','c','d');

返回4行->正确的数据

+-------+----------+
| A_LOG |  A_List  |
+-------+----------+
| WQ-83 |    a     |
| WQ-82 |    b     |
| WQ-89 |    c     |
| WQ-85 |    d     |
+-------+----------+ 

我不知道为什么这个查询失败
最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您当前的用户列表数据几乎看起来像一个有效的JSON数组,除了这些值应该用双引号而不是单引号引起来。假设您的数据如下所示:

["a","b","c","d"]

然后我们使用以下查询:

SELECT a.A_LOG, a.A_List
FROM A_TABLE a
WHERE EXISTS (SELECT 1 FROM B_TABLE b
              WHERE JSON_SEARCH(b.userList, 'one', a.A_List) IS NOT NULL);

screen capture from demo below

Demo