mysql - 那么我如何正确格式化
问题描述
我有下表
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);
解决方案
如果你想要标志,只需将表达式移动到SELECT
:
SELECT NAME, JSON_CONTAINS(Currencies, '"EURO"', '$'),
JSON_CONTAINS(Aliases, '"3"', '$')
FROM table
WHERE JSON_CONTAINS(Currencies, '"EURO"', '$') OR
JSON_CONTAINS(Aliases, '"3"', '$');
推荐阅读
- scala - 在 flink 中使用表(数据流)时出错
- jquery - DataTables PDF 导出单元格填充
- java - Eclipse Drools 值 11 不是有效的语言级别
- android - 如何将 PageView 高度与项目高度匹配?
- python - 使用预测类时遇到以下错误
- sql-server - 更新基表中的任何字段会导致更新索引视图行的所有行吗?
- android - 单击按钮时更改片段上的文本
- laravel - 如何在不使用公用文件夹和 php artisan 的情况下在 laravel graphql-playground 中加载 schema.graphql
- html - CSS Flexbox 输入无响应
- node.js - Nodejs向前传递formdata