Mysql 查询未返回不同的JSON列值

Mysql 查询未返回不同的JSON列值,mysql,arrays,json,join,select,Mysql,Arrays,Json,Join,Select,我使用的是MySql 8.0verion,有一个表t1,如下所示: +--------++--------------------------------------------------+ | id | type | users | +--------+--------------------+------------------------------+ | 11 | ["type1&qu

我使用的是
MySql 8.0verion
,有一个
表t1
,如下所示:

+--------++--------------------------------------------------+
| id     | type               | users                        | 
+--------+--------------------+------------------------------+
| 11     | ["type1", "type2"] | ["user1", "user2", "user3"]  |
| 12     | ["type2", "type4"] | ["user2", "user22", "user3"] |      
+--------+--------------------+------------------------------+
我想创建一个查询,以查找表中的所有
不同类型。
我编写了以下查询,但返回的是一个空行:

select distinct type
from 
    t1,
    json_table(
        type,
        "$[*]"
        columns (type varchar(50) PATH "$")
    ) t
order by type
查询输出:

+---------------------+
| type                |
+---------------------+
| ["type1", "type2"]  |
| ["type2", "type4"]  |
+---------------------+
期望输出:

+--------+
| type   |
+--------+
| type1  |
| type2  |
| type4  |
+--------+

type
不明确,因为它同时出现在
t1
和JSON_表结果中。您应该限定该列

mysql> select distinct t.type from t1, 
       json_table(type, '$[*]' columns (type varchar(50) PATH '$')) as t 
       order by t.type;
+-------+
| type  |
+-------+
| type1 |
| type2 |
| type4 |
+-------+

我可以通过编写一个
交叉连接

SELECT distinct j.type FROM t1
   CROSS JOIN
   JSON_TABLE(t1.type, " $ [*]" 
                COLUMNS ( type VARCHAR(20) PATH '$' )
              ) j

谢谢我已将
JSON\u表列更改为“types”
。但是,此查询在结尾处返回一个额外的行,该行包含所有类型,如
[“type1”、“type2”、“type4”]
当Json数组有多个entries时,查询不返回不同的值,我无法重现该问题,即使其中一个数组中有重复的值,它也能在我的情况下工作。我认为如果表中还有一行有三个值
[“type1”、“type2”、“type4”]
,那么它也会返回这一行。这样,结果就不会是唯一的好吧,我不知道你在做什么,但我测试了确切的情况,结果中没有重复项。
交叉联接
和SQL-89逗号式联接之间没有区别。使用
交叉联接
很有帮助,因为它不会将每一行作为数组返回