MySQL列定义

时间:2009-07-12 04:15:49

标签: mysql

有没有办法,使用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进行分组,但我正在尝试简化流程。

3 个答案:

答案 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;