我需要执行数据库连接,不幸的是数据库结构不符合第一范式。我无法更改表结构/布局,因为这是应用程序生成的,我只能创建只读查询来为我自己的统计组件获取数据。
架构如下所示。有一个表services
,它包含几个属性,其中尤其与属性property
相关。以下是报告
表的示例行:
table: report
id | vehicles | ...
-------------------
1 | 1,2,3 | ...
2 | 2,3 | ...
3 | 2 | ...
vehicle
表如下所示:
table: vehicle
vid | description
---------------
1 | Vehicle A
2 | Vehicle B
3 | Vehicle C
我的目标是计算车辆出现在报告中的频率。所需的结果行是:
desired result
description | count(*)
----------------------
Vehicle A | 1
Vehicle B | 3
Vehicle C | 2
对此的伪查询将类似于:
SELECT v.description, Count(*)
FROM report r
JOIN vehicles v
ON v.vid IN(r.vehicles)
GROUP BY v.description;
MySQL 有没有办法在数据库端处理这个问题?或者我是否必须选择所有内容,在应用程序登录中分解车辆并在数据库外部执行“加入”?
我希望它在数据库端执行此操作。我只能读取这两个表,但可以在必要时创建 View (如果可能的话,我也想避免)。
最佳答案
我发现MySQL支持FIND_IN_SET
函数,您可以在其中传递要搜索的字符串和要搜索的列表。
因此,有效的查询是:
SELECT v.description as description, COUNT(*) as count
FROM report r
JOIN vehicles v
ON FIND_IN_SET(v.vid, r.vehicles)
GROUP BY (v.description);
关于MySQL Join 与非规范化连接属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556776/