有没有办法,使用MySQL 5.0,在表中定义一个列,只要在该特定行上执行select,就会计算该列?例如,假设我有两个表,A和B:
A:
ID
COMPUTED_FIELD = SUM(SELECT B.SOME_VALUE FROM B WHERE B.A_ID = ID)
B:
ID
A_ID
SOME_VALUE
在该示例中,当我在A上为特定ID运行选择时,我希望它返回表B中针对该特定值A.ID的所有值的总和。我知道如何使用多个单独的查询并按A_ID进行分组,但我正在尝试简化流程。
答案 0 :(得分:1)
是。你不能在表格中这样做,但你可以在视图中这样做。
CREATE VIEW A
AS
SELECT SUM(B.SOME_VALUE) AS COMPUTED_FIELD
FROM B
WHERE B.A_ID = 'id';
显然,id必须是你要搜索的内容。
在这种情况下,您不需要表A.
答案 1 :(得分:1)
表格不能包含计算值。尝试使用视图。 manual entry有完整的详细信息。您的最终结果将显示为:CREATE VIEW A AS SELECT SUM('SOME_VALUE'), B.A_ID FROM B;
(未测试)
那就是说,我不确定为表A提供一个独立的唯一ID是多么重要 - 除非你添加另一个表C来保存B.A_ID引用的外键,否则这是不可能的。 ,并使用表C作为创建视图的参考。
答案 2 :(得分:1)
正如txwikinger建议的那样,最好的方法是将A设置为视图,而不是表格。出于所有意图和目的,视图是简化的,可重用的查询。它们通常在以下情况下使用:a)公共查询具有计算列,或b)抽象出常用的复杂连接。
要扩展上一个答案,为了能够查询任何ID,请尝试以下视图:
CREATE VIEW A
AS
SELECT B.A_ID AS ID, SUM(B.SOME_VALUE) AS COMPUTED_FIELD
FROM B
GROUP BY B.A_ID;
然后你可以正常选择它,例如:
SELECT A.ID, A.COMPUTED_FIELD
FROM A
WHERE A.ID IN (10, 30);
或
SELECT A.ID, A.COMPUTED_FIELD
FROM A
WHERE COMPUTED_FIELD < 5;