繁体   English   中英

仪表板中的 SQL 一对多关系

[英]SQL One to Many Relationship in a Dashboard

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

ProductA   ProgramA
ProductB   ProgramB
ProductC   ProgramBoth

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

我是否在突破 SQL 的极限? 有办法吗? 请注意,我是从 Google Sheet 导入的,所以如果更容易的话,我可以更改基础值。 在 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

假设您使用的是mySql,我将尝试以不同的方式构造数据以某种方式完成相同的任务。

可能是一个产品表,其中的col为ID,Col为产品A,B和C,Col为关系,然后另一个表Programs,其Col为ID,Col为A&B,然后使用“产品”中的关系cols表,查询两个表以填充您的字段。

ID | Product | Rel | Rel |        
--------------------------        
 1 |    A    |  1  |     |        
--------------------------        
 2 |    B    |  2  |     |        
--------------------------        
 3 |    C    |  1  |  2  |
--------------------------

ID | Program |
--------------
 1 |    A    |
--------------
 2 |    B    |
--------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM