sql - 仪表板中的 SQL 一对多关系
问题描述
不确定这是否是表达问题的正确方法,但我有一个如下所示的数据库
ProductA ProgramA
ProductB ProgramB
ProductC ProgramBoth
我面临的一个问题是,当我将其放入仪表板并使用仪表板仅过滤 ProgramA 时,我希望同时查看产品 A 和产品 C。当我过滤 ProgramB 时,我希望同时查看产品 B 和产品 C。从技术上讲,用户可以在仪表板下拉菜单中选择两个程序(“ProgramA + ProgramBoth”),但他们没有。
我在挑战 SQL 的极限吗?有办法吗?请注意,我是从 Google 表格中导入的,因此如果更容易,我可以更改基础值。在 Google 表格中,我有一个下拉菜单,因此一次只能输入一个值(可以更改)。
解决方案
您没有突破 SQL 的限制 :-) 您所描述的是多对多关系,而不是考虑“两者”的关系,而是将其视为每个关系的一行,因此对于产品 C,您将有 2 行 - 一个用于程序 A,一个用于程序 B,大致如下:
CREATE TABLE Product_Programs
(
Product VARCHAR(10) NOT NULL REFERENCES Products(Product),
Program VARCHAR(10) NOT NULL REFERENCES Programs(Program),
PRIMARY KEY (Product, Program)
);
INSERT INTO Product_Programs (Product, Program)
VALUES ('ProductA', 'ProgramA'),
('ProductB', 'ProgramB'),
('ProductC', 'ProgramA'),
('ProductC', 'ProgramB');
现在您可以轻松查询参与计划的任何产品
SELECT Product
FROM Product_Programs
WHERE Program = 'ProgramA';
这将返回产品 A 和产品 C。
HTH
推荐阅读
- prolog - 将列表作为两个列表的连续并集
- hosting - 我们可以通过共享托管托管和 angular/.Net Core 应用程序吗
- python-3.x - 长正则表达式模式未按计划工作
- css - CSS:Rotate3D Ipad 故障
- flutter - Flutter:如何仅在滚动后显示 AppBar?
- python - 当每个特征都是向量时如何使用 SVM?
- sql - SQL 根据条件执行一次查询 2
- python - 如果有字符串,则将负数转换为正数
- reactjs - 根据tone.js反应项目中振荡器波的形状绘制可视化/颜色变化?
- python - 在列表中拆分行并作为变量 python3/telethon 检索