2016-10-15 19 views
2

ジョインとwhereを使用してみましたが、実行に時間がかかりすぎるか、重複する列名エラーが発生するためタイムアウトが発生します。別の2つのテーブルの条件に基づいて1つのテーブルから行を選択する

I 3つのテーブルを有する: A、B、C IはAの行がBで条件を満たさなければならないので、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

次いで、LEFT JOINを使用して一緒にA、B、及びCに参加し、その後、Dテーブルが既に作成されていない場合は、一致がいずれか 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からのレコードを保持しますテーブルAと同じ定義を使用して作成してください。

+0

使用している各ステップ/用語に何か説明がありますか?私は本当に言語に精通していません。 –

+0

テーブルがまだ構築されていないので、「挿入」の代わりに「作成」を使用しますか? –

+0

@Stacksofoverflowはい、まだ作成されていない場合は、テーブルDを作成します。テーブルAと同じ構造でなければならないので、テーブルAの定義を再利用することができます。 –

関連する問題