sql - 创建一个加入逗号分隔值的视图
问题描述
我为我的 SQL 作业请求帮助。
我有一张带乐器的桌子:
id instrument_name instrument_at_shops
-----------------------------------------------
1 Electric Guitar 1;2;3;4;
2 Midi Keyboard 1;3;
3 Tom Drum 2;
4 Electric Guitar 1;
5 Electric Guitar 0;
还有一张带商店的桌子:
shop_id shop_name shop_address
-----------------------------------------------
1 Shop1 City1 Street 1, building 1
2 Shop2 City1 Street 5, building 4
3 Shop3 City2 Street 4, building 4
4 Shop4 City3 Street 10, building 7
在我的乐器表中,我有几个数字代表拥有特定乐器的商店的 ID。
问题是:如何创建一个包含商店名称和该商店中的乐器的视图?
逻辑是这样的:
SELECT shop_name, instrument_name
FROM Shop
CROSS JOIN Instrument
WHERE instrumet_at_shops CONTAINS shop_id
但我无法创建适当的查询或视图设计。
先感谢您!
解决方案
你真的应该把精力放在修复数据模型上。它坏了,坏了,坏了:
- 不要在一个字符串中存储多个值。
- 不要将数字存储为字符串。
- 应正确声明外键关系。
- SQL 具有糟糕的字符串处理功能。
- SQL 有一种很好的方式来存储列表——它被称为表。
如果您遇到了非常非常糟糕的数据模式。. . . 好吧,你应该尝试修复它。但如果没有,您可以使用字符串操作:
select i.*, s.shop_name
from instrument i join
shops s
on concat(';', i.instrument_at_shops, ';') like concat('%;', shop_id, ';%');
不幸的是,真的没有办法优化这个查询
推荐阅读
- javascript - 使用 Firebase 令牌进行身份验证
- javascript - 如何验证按钮单击 jquery/javascript 上的登录表单?
- android - 片段上的RecyclerView分页无限滚动问题
- sockets - ipvsadm 未显示 kubeadm 集群中的任何条目
- python - 如何在 Tensorflow 中导入 keras.engine.topology?
- c++ - 配置 Visual Studio 2017 以使用现有的 Android SDK 和 NDK 组件
- python - 来自python的arduino自动LED开/关信号
- postgresql - 由于关系列不存在,无法在 postgresq 中加载 CSV 文件
- python - 优化测试来自多个 NumPy 数组的所有行组合
- javascript - JavaScript - 点击时显示更多信息