2017-03-22 3 views
0

저는 MySQL을 사용하고 있습니다. 어떻게하면 관련 데이터의 유효성을 입증 할 때 테이블에 INSERT를 실행할 수 있습니까? 고안된 예를 용서하십시오.SQL 조건부 삽입

내 테이블 인 경우 :

> SELECT * FROM colors; 
id color owner 
-- ------ ----- 
10 red 2 
11 banana 6 
12 blue 9 

및 fruit.color이 외래 키가 나는 바나나에 대한 정보를 삽입 할

colors.id하는 것입니다

> SELECT * FROM fruit; 
id color_id name 
-- -------- ------- 
59 10  cherry 
60 12  blueberry 

하지만, 색상 소유자가 6 인 경우에만 표시됩니다. 여기에 원시 INSERT가 있습니다.

INSERT INTO 
    fruit 
    (color_id, name) 
VALUES 
    (11, 'banana'); 
마지막 절은 분명히 진짜입니다

INSERT INTO 
    fruit 
    (color_id, name) 
VALUES 
    (11, 'banana') 

-- ??? I have no idea what to put here ??? 
ONLY IF (
    (SELECT COUNT(*) FROM fruit 
    INNER JOIN colors ON fruit.color_id = colors.id 
    AND colors.id  = 11 
    WHERE colors.owners = 6) >= 1 
) 

,하지만 난 거기에 무엇을 해야할지하지 않습니다

내가 좋아하는 일을하고 싶습니다. 삽입하려고하는 color_idowner 열이 내가 제공 한 값과 같으면 아이디어는 값을 삽입하는 것입니다.

도움 말?

당신은 이런 식으로 뭔가를 시도 할 수 있습니다

답변

1

:

insert into fruit (color_id, name) 
select 11, 'banana' 
where (select count(*) from fruit join colors on fruit.color_id = colors.id 
where colors.id = 11 and colors.owner = 6) >= 1; 

또는 당신을 위해 동등하게

insert into fruit (color_id, name) 
select 11, 'banana' 
where exists 
(select * from fruit join colors on fruit.color_id = colors.id 
where colors.id = 11 and colors.owner = 6); 
+0

이것은 훌륭한 대답입니다. INSERT INTO ... SELECT ... 그런 식으로 사용할 수 있다는 것을 알지 못했습니다. 감사! –

0

겠습니까이 작품?

IF (SELECT COUNT(*) FROM fruit 
    INNER JOIN colors ON fruit.color_id = colors.id 
    AND colors.id  = 11 
    WHERE colors.owners = 6) >= 1 
THEN 
    INSERT INTO fruit 
    (color_id, name) 
    VALUES 
    (11, 'banana'); 
END IF; 
+0

나는 이것을 작동시킬 수 없었다. 구문 오류가 계속 발생했습니다. –