首页 > 解决方案 > 那么我如何正确格式化

问题描述

我有下表

ID 姓名 货币 别名
1 用户 ["美元","欧元"] {“用户2”:[“3”]}

我想编写基于货币和别名返回以下结果的 SQL,以显示具有用户别名的人员和具有相同货币的用户

姓名 货币 别名
用户 1 无效的
用户 2 无效的 1

我的初始 SQL 如下

SELECT NAME 
FROM table 
WHERE JSON_CONTAINS(Currencies,'"EURO"',"$") 
   OR JSON_CONTAINS(Aliases,'"3"',"$");

上面代码的问题是我无法区分这些用户是否共享相同的别名或相同的货币,它实际上并不需要与上面表格的格式相同来区分就可以了

顺便说一句,我正在使用 MySQL(10.5.10-MariaDB-1:10.5.10+maria~bionic)

样品:

CREATE TABLE IF NOT EXISTS table(
    ID INT,
    NAME VARCHAR(255),
    Currencies LONGTEXT,
    Aliases LONGTEXT,
    PRIMARY KEY(ID)
);

插入数据:

REPLACE INTO table(ID, NAME, Currencies, Aliases) VALUES (:id, :name, :currencies, :aliases);

标签: mysqlsqljson

解决方案


如果你想要标志,只需将表达式移动到SELECT

SELECT NAME, JSON_CONTAINS(Currencies, '"EURO"', '$'),
       JSON_CONTAINS(Aliases, '"3"', '$') 
FROM table 
WHERE JSON_CONTAINS(Currencies, '"EURO"', '$') OR
      JSON_CONTAINS(Aliases, '"3"', '$');

推荐阅读