2009-07-12 18 views
0

MySQL 5.0を使用して、特定の行でselectが実行されるたびに計算されるカラムを定義する方法はありますか?たとえば、私は2つのテーブル、AとB持っていると言う:例ではMySQLカラム定義

A: 
    ID 
    COMPUTED_FIELD = SUM(SELECT B.SOME_VALUE FROM B WHERE B.A_ID = ID) 
B: 
    ID 
    A_ID 
    SOME_VALUE 

を私は特定のIDのためのAの選択を実行したとき、私はそれがために、表Bのすべての値の合計を返すようにしたいですA.IDの特定の値。私は複数の個別のクエリを使用してこれを行う方法を知っているとA_IDでグループを行うが、私は少しプロセスを合理化しようとしている。

答えて

1

はい。あなたはテーブルの中でそれをすることはできませんが、あなたはそれをビューで行うことができます。

CREATE VIEW A 
AS 
SELECT SUM(B.SOME_VALUE) AS COMPUTED_FIELD 
FROM B 
WHERE B.A_ID = 'id'; 

明らかに、IDはあなたが探しているものである必要があります。

この場合、テーブルAは必要ありません。

+0

詳細を教えてください。これを行うためのビューをどのように定義すればよいですか? – Elie

+0

詳細は十分ですか? – txwikinger

+0

これはまさに私が探していたものです。ありがとう! – Elie

1

テーブルには計算値を含めることはできません。ビューを使用してみてください。 manual entryに詳細があります。あなたの最終結果は次のようなものになります:(テストされていません)

しかし、私はテーブルAに対して独立した一意のIDを持つことがいかに重要であるかはわかりませんB.A_IDによって参照される外部キーを保持するために別のテーブルCを追加し、ビューを作成する際にテーブルCを参照として使用しない限り、

+0

例を簡略化しました。問題の場合、テーブルAとテーブルBの両方にいくつかの重複しないデータフィールドがあり、潜在的にテーブルAの各エントリについてテーブルBに多くのエントリが存在する。 – Elie

1

txwikingerが示唆しているように、これを行う最善の方法は、テーブルではなくビューとして設定することです。ビューは、すべての目的と目的のために、合理化された再利用可能なクエリです。一般的には、a)共通のクエリが計算カラムを持つ場合、またはb)頻繁に使用される複雑な結合を抽象化する場合に使用されます。例えば、次に

CREATE VIEW A 
AS 
SELECT B.A_ID AS ID, SUM(B.SOME_VALUE) AS COMPUTED_FIELD 
FROM B 
GROUP BY B.A_ID; 

あなたが正常にそこに選択することができます:

は、任意の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;