2016-10-15 6 views
2

조인 및 여기에 대한 문을 사용하여 시도했지만 시간이 너무 오래 걸리거나 중복 된 열 이름 오류가 발생하기 때문에 시간 초과가 발생합니다.두 개의 개별 테이블에서 조건을 기반으로 한 테이블의 행 선택

나는 3 개의 테이블을 가지고 있습니다 : A, B, C B와 C의 제약 조건을 기반으로 한 A의 행으로 구성된 테이블을 만들고 싶습니다. A의 행은 B의 조건을 충족해야합니다. C :

(A.ID = B.ID 및 A.PURCHASE = B.PURCHASE) 또는 (A.ID = C.ID 및 A.PURCHASE = C.PURCHASE).

나는 주위를 위해 MySQL을 사용 했어요 ... 일주일

이 내가 들어 왔 가장 가까운 (는 응답) : 어떤 도움

CREATE TABLE D 
SELECT T1.* 
FROM TABLE A AS T1, TABLE B AS T2, TABLE B AS T3 
JOIN T2, T3 ON ((T1.CUSTOMER_ID = T2.CUSTOMER_ID AND T1.DAY_ID = 
T2.DAY_ID) OR (T1.CUSTOMER_ID = T3.CUSTOMER_ID AND T1.DAY_ID = T2.DAY_ID)); 

감사합니다!

답변

3

가입 같이 A, B, 및 C는 LEFT JOIN를 사용하고, 일치 발생한 여기서 D 테이블이 이미 작성되어 있지 않은 경우, 그 후, A로부터 어느 B 또는 C.

INSERT INTO D 
SELECT DISTINCT a.*  -- remove duplicate records 
FROM tableA a 
LEFT JOIN tableB b 
    ON a.CUSTOMER_ID = b.CUSTOMER_ID AND a.DAY_ID = b.DAY_ID 
LEFT JOIN tableC c 
    ON a.CUSTOMER_ID = c.CUSTOMER_ID AND a.DAY_ID = c.DAY_ID 
WHERE b.CUSTOMER_ID IS NOT NULL OR -- retain records where either 
     c.CUSTOMER_ID IS NOT NULL  -- condition matches 

기록 유지 테이블 A와 동일한 정의를 사용하여 생성하십시오.

+0

사용중인 각 단계/용어에 대한 설명이 있습니까? 나는 그 언어에 익숙하지 않다. –

+0

내 테이블이 아직 구성되지 않았기 때문에 "insert into"대신 "create"를 사용합니까? –

+0

@Stacksofoverflow 예, 아직 생성되지 않은 경우 계속 진행하여 테이블 D를 만듭니다. 테이블 A와 동일한 구조를 가져야하므로 테이블 A에 대한 정의를 다시 사용할 수 있습니다. –

관련 문제