2010-02-16 4 views
6

하나의 열에 다른 테이블 '베타'의 기본 키를 포함 할 'alfa'라는 하나의 mysql 테이블이 있습니다. 그러나 '베타'의 항목을 찾을 수없는 경우 '베타'에 값을 삽입하고 '알파'에 새 키를 사용하고 싶습니다. 어떻게 든 하나의 쿼리에서이 작업을 수행 할 수 있습니까?삽입되어 있지 않다면 else mysql을 선택하십시오.

내가 현재 가지고 '존'이 테이블에 존재하는 경우 잘 작동하지만, 그렇지 않으면 실패

INSERT INTO alfa SET c1=(SELECT id FROM beta WHERE name = 'john'); 

. 그래서 새로운 이름을 삽입하고 선택하도록 그것을 향상시킬 수 있습니까? id는 auto_incremented입니다.

IF를 살펴 보았지만 SELECT 외부에서 IF를 사용하는 방법을 아직 찾지 못했습니까?

여러 쿼리에서 할 수 있지만 원격 데이터베이스와 이야기하고 있으므로 한꺼번에 처리하는 것이 좋을 수 있습니다.

는 예를 들어, 테이블은 다음과 같이 생성 된 수 :

CREATE TABLE alfa (
    c1 int, 
    PRIMARY KEY (c1) 
) 

CREATE TABLE beta (
    id int auto_increment, 
    name varchar(255), 
    PRIMARY KEY (id) 
) 

그렇게 alfa.c1는 beta.id 값을 참조해야합니다. 한마디로

내가하고 싶은 : 존 베타에 존재하지 않는 경우

가 알파에서 C1으로 베타 테이블에서 존의 ID를 삽입 한 후 베타로 존을 삽입하고 새 자동차가 ID를 증가 삽입 Alpha에서 c1로 john.

+0

질문을 편집하고 최소한 테이블 구조를 넣을 수 있습니까? 베타 버전에서 필요한 추가 정보가 어디에서 나올지 확실하지 않습니다. 알파가 아직 베타 버전으로 생성되지 않은 경우 알파를 사용할 수있는 방법은 무엇입니까? –

+0

지금 더 많은 정보를 추가하려고했습니다. – Zitrax

답변

3

내가 갈을 가지고 있지만, 마음에 곰 마이크로 소프트 SQL 배경에서 오는, 나는 정확한 당신의 테이블의 구조, 그래서는 SQL의 일부에 익숙하지 않아요 것은 아마 약간 끈적 끈적입니다 것입니다.

IF (SELECT COUNT(*) FROM beta WHERE name = 'John' > 0) 
    UPDATE alfa SET c1=(SELECT id FROM beta WHERE name = 'John') 
ELSE 
BEGIN 
    INSERT INTO beta (name) VALUES ('John') 
    INSERT INTO alfa (c1) VALUES (LAST_INSERT_ID()) 
END 

희망이 있습니다.

+1

p.s. 쿼리의 수에 대해 걱정이된다면 스토어드 프로 시저를 사용하지 않는 것이 좋습니다. 그러면 원격 서버에 대한 단일 호출 만 수행합니다. – Bryan

+0

감사합니다. 가까운 것으로 보입니다. 그러나 구문은 IF .. ELSE .. END IF입니다. IF 문은 프로 시저에서만 사용할 수 있으므로 어떤 경우에도 사용해야합니다. 동일한 문제는 여기에서 논의됩니다 : http://is.gd/8xupF – Zitrax

관련 문제