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逗号式联接之间没有区别。使用交叉联接
很有帮助,因为它不会将每一行作为数组返回