[SQL] 열은 다른 열에서 계산?
SQL열은 다른 열에서 계산?
주어진 다음의 표 :
id | value
--------------
1 6
2 70
자동으로 동일한 테이블의 다른 열을 기준으로 계산 된 열을 추가 할 수있는 방법이 있습니까? 같은 테이블의 VIEW하지만 일부처럼. 예로서, 계산 된 값의 절반이 될 것이다. 값이 변경, 뷰는 것처럼 때 자동으로 업데이트해야합니다 계산.
그 결과는 다음과 같습니다
id | value | calculated
-----------------------
1 6 3
2 70 35
해결법
-
==============================
1.생성 된 열은 5.7.6 이상이다 MySQL 버전에 대한 좋은 방법 중 하나입니다.
생성 된 열은 5.7.6 이상이다 MySQL 버전에 대한 좋은 방법 중 하나입니다.
생성 된 열 두 가지 종류가 있습니다 :
두 유형 모두 NOT NULL 제한이있을 수 있지만 저장 생성 된 열은 인덱스의 일부가 될 수 있습니다.
현재의 경우, 우리는 저장 생성 된 열을 사용하는 것입니다. 내가 계산에 필요한 값을 모두 테이블에 존재한다고 생각했다 구현하려면
CREATE TABLE order_details (price DOUBLE, quantity INT, amount DOUBLE AS (price * quantity)); INSERT INTO order_details (price, quantity) VALUES(100,1),(300,4),(60,8);
금액은 자동으로 테이블에 나타납니다 그리고 당신은 또한 당신이 모든 열을 업데이트 할 때마다, 금액도 업데이트됩니다 점에 유의하시기 바랍니다, 직접 액세스 할 수 있습니다.
-
==============================
2.이 선택 인 경우, 당신은 그것을 같이 할 수 있습니다 :
이 선택 인 경우, 당신은 그것을 같이 할 수 있습니다 :
SELECT id, value, (value/2) AS calculated FROM mytable
그 밖에, 당신은 또한 첫번째 누락 된 열을 추가 한 다음 새 열 등의 값을 계산하는 UPDATE 질의를 수행 할 테이블을 변경할 수 있습니다 :
UPDATE mytable SET calculated = value/2;
이 자동해야하고 MySQL 버전이 그것을 허용하는 경우, 당신은 트리거로 시도 할 수 있습니다
-
==============================
3.MySQL의 5.7 지원은 열을 계산. 그들은 "생성 된 열"을 호출하고 구문은 약간 이상한이지만, 내가 다른 데이터베이스에서 볼 수있는 동일한 옵션을 지원합니다.
MySQL의 5.7 지원은 열을 계산. 그들은 "생성 된 열"을 호출하고 구문은 약간 이상한이지만, 내가 다른 데이터베이스에서 볼 수있는 동일한 옵션을 지원합니다.
https://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-generated-columns
-
==============================
4.@ krtek의 대답은 올바른 방향이지만, 문제의 몇 가지가 있습니다.
@ krtek의 대답은 올바른 방향이지만, 문제의 몇 가지가 있습니다.
나쁜 소식은 같은 테이블에 트리거에서 UPDATE를 사용하여 작동하지 않을 것입니다. 좋은 소식은 필요가 없습니다 것입니다; 당신이 테이블도 터치하기 전에에서 작동 할 수있는 새 개체가있다.
트리거가된다 :
CREATE TRIGGER halfcolumn_update BEFORE UPDATE ON my_table FOR EACH ROW BEGIN SET NEW.calculated = NEW.value/2; END;
또한 참고가 시작 것을 ... END를; 구문은 사실상 다른 구분자로 해석되어야한다. 전체 오두막이된다 :
DELIMITER | CREATE TRIGGER halfcolumn_insert BEFORE INSERT ON my_table FOR EACH ROW BEGIN SET NEW.calculated = NEW.value/2; END; | CREATE TRIGGER halfcolumn_update BEFORE UPDATE ON my_table FOR EACH ROW BEGIN SET NEW.calculated = NEW.value/2; END; | DELIMITER ;
-
==============================
5.자동으로 다른 컬럼의 절반에 업데이트됩니다 테이블에 열을 추가하려면 트리거로 그렇게 할 수 있습니다.
자동으로 다른 컬럼의 절반에 업데이트됩니다 테이블에 열을 추가하려면 트리거로 그렇게 할 수 있습니다.
그러나 나는 이미 제안 된 답변이 할 수있는 더 좋은 방법이 생각합니다.
코딩 트리거를 건조 :
CREATE TRIGGER halfcolumn_insert AFTER INSERT ON table FOR EACH ROW BEGIN UPDATE table SET calculated = value / 2 WHERE id = NEW.id; END; CREATE TRIGGER halfcolumn_update AFTER UPDATE ON table FOR EACH ROW BEGIN UPDATE table SET calculated = value / 2 WHERE id = NEW.id; END;
우리가 응답해야 이벤트가 다르기 때문에 나는, 당신은 단지 하나의 트리거를 만들 수 있다고 생각하지 않습니다.
-
==============================
6.나는 많은 사람들이이 문서에 도착 하듯이 아직도 누군가를 도움이되기를 바랍니다. 당신이 계산 열이 필요하다면, 왜 그냥보기에서 원하는 열을 노출하지? 단지 데이터를 저장하지 않습니다 또는 트리거와 성능에 과부하가 ... 단순히보기에 계산 이미 포맷 필요한 데이터를 / 노출.
나는 많은 사람들이이 문서에 도착 하듯이 아직도 누군가를 도움이되기를 바랍니다. 당신이 계산 열이 필요하다면, 왜 그냥보기에서 원하는 열을 노출하지? 단지 데이터를 저장하지 않습니다 또는 트리거와 성능에 과부하가 ... 단순히보기에 계산 이미 포맷 필요한 데이터를 / 노출.
도움이 되었기를 바랍니다...
-
==============================
7.당신은 MYSQL 5.7에서 발생하는 열을 사용할 수 있습니다.
당신은 MYSQL 5.7에서 발생하는 열을 사용할 수 있습니다.
사용 예 :
ALTER TABLE tbl_test ADD COLUMN calc_val INT GENERATED ALWAYS AS (((`column1` - 1) * 16) + `column2`) STORED;
/ 가상 STORED
from https://stackoverflow.com/questions/5222044/column-calculated-from-another-column by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 하위 쿼리는 1 개 이상의 값을 반환했습니다. 이 허용되지 않는 서브 쿼리가 다음에 올 때 =,! =, <, <=,>,> = (0) | 2020.03.17 |
---|---|
[SQL] addslashes를 통해 SQL 주입의 예 ()? (0) | 2020.03.17 |
[SQL] Reporting Services의 단일 매개 변수에 대해 여러 값을 전달 (0) | 2020.03.17 |
[SQL] LISTAGG 기능 : "문자열 연결의 결과가 너무 깁니다" (0) | 2020.03.17 |
[SQL] MySQL의 외래 키 제약 조건은 잘못 오류가 형성된다 (0) | 2020.03.17 |