首页 > 解决方案 > 仪表板中的 SQL 一对多关系

问题描述

不确定这是否是表达问题的正确方法,但我有一个如下所示的数据库

ProductA   ProgramA
ProductB   ProgramB
ProductC   ProgramBoth

我面临的一个问题是,当我将其放入仪表板并使用仪表板仅过滤 ProgramA 时,我希望同时查看产品 A 和产品 C。当我过滤 ProgramB 时,我希望同时查看产品 B 和产品 C。从技术上讲,用户可以在仪表板下拉菜单中选择两个程序(“ProgramA + ProgramBoth”),但他们没有。

我在挑战 SQL 的极限吗?有办法吗?请注意,我是从 Google 表格中导入的,因此如果更容易,我可以更改基础值。在 Google 表格中,我有一个下拉菜单,因此一次只能输入一个值(可以更改)。

标签: sqlgoogle-data-studio

解决方案


您没有突破 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


推荐阅读