【问题标题】:So how i format this correctly那么我如何正确格式化
【发布时间】:2021-08-30 23:27:29
【问题描述】:

我有下表

ID Name Currencies Aliases
1 User ["USD","EURO"] {"User2":["3"]}

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

NAME Currencies Aliases
User 1 NULL
User2 NULL 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);

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 我正在使用 MySQL (mariadb)
  • 感谢提供示例数据,但不清楚输入如何映射到输出。
  • 以 CREATE TABLE + INSERT INTO 脚本的形式提供示例数据(当前表示没有用)。样本数据必须包括所有可能的关系变化。严格提供此数据所需的输出,并附上解释。指定精确的 MySQL 版本。

标签: mysql sql json


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 2012-06-13
    • 1970-01-01
    • 2018-02-18
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2012-02-15
    相关资源
    最近更新 更多