【发布时间】:2009-07-12 21:20:29
【问题描述】:
在上一个问题的后续步骤中,假设我有 3 个表,A、B 和 C。表 A 有一个 ID,用作表 B 和 C 的外键,每个表都有一些值作为属性。对于表A中的每个ID,我想得到表B和C之间的值的差异,可以这样做:
CREATE VIEW T1 AS
SELECT B.A_ID AS ID, SUM(B.VALUE) AS VAL
FROM B
GROUP BY B.A_ID;
CREATE VIEW T2 AS
SELECT C.A_ID AS ID, SUM(C.VALUE) AS VAL
FROM C
GROUP BY C.A_ID;
SELECT T1.ID, T1.VAL, T2.VAL FROM T1, T2 WHERE T1.ID = T2.ID;
问题是,如果表 B 有一些特定 ID 的值,但表 C 没有,反之亦然。在这种情况下,我的 select 语句将不会返回该行。有没有办法让我创建一个单一的视图,它基本上如下所示:
CREATE VIEW T3 AS
SELECT B.A_ID AS ID, SUM(B.VALUE) AS VAL1, SUB(C.VAL) AS VAL2
FROM B, C
WHERE B.A_ID = C.A_ID
GROUP BY B.A_ID;
如果提供此类视图的创建脚本示例,将不胜感激。
【问题讨论】:
-
我对最终为您工作的解决方案非常感兴趣。
-
我可能会尝试,至少,使用你建议的那个。我的托管服务提供商遇到了问题,我的用户访问正在解决的数据库,所以我还不能测试它,尽管我已经准备好了我的脚本。如果您的解决方案有效,我将接受您的正确回答。
-
原来我的托管服务商只支持MySQL 5.0,并且在MySQL 5.0.1中引入了视图,所以这个自动整理数据的选项就没有了。
标签: mysql