2014-04-04 3 views
1

SQL 쿼리를 만들려고하는데 두 테이블의 열 합계를 확인한 다음 조건이 충족되면 다른 테이블에 새 행을 삽입해야합니다. 명시 적 잠금을 사용하는 저장 프로 시저를 사용할 수 있지만 단일 SQL 쿼리에서이를 수행 할 수 있는지 알고 싶습니다. 나는 다음과 같은 있지만 MySQL의 워크 벤치에 구문 오류가 있습니다조건을 사용하여 쿼리 삽입

INSERT INTO table1 (`col1`, `col2`) 
VALUES ('abc', 'xyz') WHERE 
(
((select 
COUNT(*) from table2 t2 where t2.id = 1) 
+ (select sum(t3.counter) from table3 t3 
WHERE t3.id = 1)) < (select t4.total_allowed 
FROM table4 t4 where t4.id = 1) 
); 

답변

3

insert the results of a select query 수 있기 때문에 수행 할 수 있습니다.

INSERT INTO table1 (`col1`, `col2`) 
SELECT 'abc', 'xyz' 
FROM DUAL WHERE 
(
((select 
COUNT(*) from table2 t2 where t2.id = 1) 
+ (select sum(t3.counter) from table3 t3 
WHERE t3.id = 1)) < (select t4.total_allowed 
FROM table4 t4 where t4.id = 1) 
); 
+0

당신은 저를 펀치에 이겼습니다. 다음을 참조로 추가하겠습니다. [여기를 클릭하십시오] (http://stackoverflow.com/questions/5253302/insert-into-select-for-all-mysql-columns). –

+0

너 락! 그게 내가 원했던거야, 고마워 .-) – Rahul

0

MySQL의 INSERT 구문은 WHERE 절을 지원하지 않습니다 썼다.

+0

그런 다음 MySQL의 SQL 문에서이 조건을 검사하는 다른 방법이 있습니까? – Rahul

+0

여러 쿼리를 사용해야하는 것 같습니다. –

+0

하지만 여러 쿼리가 경쟁 조건으로 인해 어려움을 겪지 않을까요? (단일 트랜잭션으로 쿼리를 실행하기 위해 JDBC를 사용한다고 가정). 저장 프로 시저가이를 피할 수있는 유일한 방법입니까? – Rahul

관련 문제