根据两个单独表格中的条件从一个表中选择行

时间:2016-10-15 20:58:12

标签: mysql database

我尝试过使用连接和其中的语句,但是我要么超时,因为它运行时间太长或者我得到重复的列名错误。

我有3张桌子: A,B,C 我想根据B和C中的约束创建一个由A行组成的表。所以A中的行必须满足B或C中的条件:

(A.ID = B.ID和A.PURCHASE = B.PURCHASE)或(A.ID = C.ID AND 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));

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

使用LEFT JOIN将A,B和C连接在一起,然后保留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

如果尚未创建D表,则使用与表A相同的定义创建它。

相关问题