2011-07-24 27 views
4

2つのカラム値を組み合わせたカラムを持つテーブルを作成することは可能ですか?このような何か:mysqlでテーブルを作成して1つのカラムを別の2つのカラムの合計値にする

create table test1 (
    number1 int, 
    number2 int, 
    total int DEFAULT (number1+number2) 
); 

またはこのような:まさにそれを行うことはできませんが、あなたはそれらを組み合わせたクエリに基づいてビューを作成することができます

CREATE TABLE `Result` (
    `aCount` INT DEFAULT 0, 
    `bCount` INT DEFAULT 0, 
    `cCount` = `aCount` + `bCount` 
); 

答えて

11

CREATE VIEW `my_wacky_view` AS 
SELECT `number1`, `number2`, `number1` + `number2` AS `total` 
FROM `test1`; 

WHERE句で結合されたデータを参照するクエリをたくさん実行する場合を除き、実際に結合されたデータをテーブルに格納するのは避けてください。

+0

私は、クエリキャッシュを使用して多くの読み取りがうまく機能すると思われます。しかし、最初に測定:) – spacediver

+0

+1ビューはIMHO過小評価されています。私は本当に列の計算をキャプチャする方法が好きです。すべての選択でそれを繰り返す必要はありません。彼らはまた、本当にうまく積み重ねられます(つまり、ビューなどのビュー)。 – Bohemian

+1

私はいつもこのようなVIEWか、クエリ内の 'SELECT num1 + num2 FROM test'のどちらかを使用します。計算された列を考える(またはMySQLのトリガーを使う)のは、テーブルが大きくなりすぎて(何百万行も)クエリが遅くなってしまうことになります。または、計算が非常に複雑で単純な加算/乗算ではない場合 –

4

テーブルにトリガーを作成すると、test1テーブルでINSERTが発生するたびにMySQLが自動的にそのカラム値を計算して挿入します。トリガ上のMySQLのドキュメント

次にトリガー

を作成
CREATE TRIGGER triggername AFTER INSERT 
ON test1 
FOR EACH ROW 
UPDATE test1 SET NEW.number3=NEW.number1+NEW.number2 

create table test1 (
    number1 int, 
    number2 int, 
    number3 int 
); 

:テーブルを作成し http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

あなたは更新がに起こることを期待している場合にもONのUPDATEトリガを追加してください行。

0

リトル修正:

CREATE TRIGGER triggername BEFORE INSERT 
ON test1 
FOR EACH ROW 
SET NEW.number3=NEW.number1+NEW.number2 
+0

これはなぜ修正と見なされますか? – 10basetom

3

私もこの問題がありました。エドガー・ベラスケス」ここに答え、そしてthis questionへの回答から、私はこの呪文につまずいた:これは、MySQL 5.6.22で私の作品

CREATE TRIGGER insert_t BEFORE INSERT 
ON test1 
FOR EACH ROW 
SET NEW.number3=NEW.number1+NEW.number2; 

CREATE TRIGGER insert_t_two BEFORE UPDATE 
ON test1 
FOR EACH ROW 
SET NEW.number3=NEW.number1+NEW.number2; 

関連する問題