从两个表mysql中选择Distinct results

时间:2015-07-11 09:31:32

标签: mysql sql join views

我有两个表(MYSQL)包含不同的列名,想查询表1中的所有数据和表2中表1中不存在的所有数据

数据如下: 表1

Ref     Desc    Price

A       TEXT1     12
B       TEXT2     10
C       TEXT3     5

表2:

Code     Desc    Price

A       TEXT1     7
B       TEXT2     10
D       TEXT4     2

我希望结果如下:

Ref     Desc    Price

A       TEXT1     12
B       TEXT2     10
C       TEXT3     5
D       TEXT4     2

所以我试图提出这个观点:

CREATE  OR REPLACE VIEW `partsquery` AS
SELECT  table1.Ref AS reference,    
        table1.Desc AS description,
        table1.Price AS price
        FROM table1
UNION ALL
SELECT  t2.code AS Ref,
        t2.Desc AS description,
        t2.price  AS price
FROM
    table2 AS t2
    LEFT JOIN table1 AS t1
    ON 
            t2.Code = t1.Ref
WHERE t1.Ref Is Null;

这个视图给了我想要的东西,但实际上它的速度很慢,因为我有大数据。那么有另一种方法来获得我的结果吗?

1 个答案:

答案 0 :(得分:0)

使用union all

select t1.*
from table1 t1
union all
select t2.*
from table2 t2
where not exists (select 1 from table1 t1 where t1.code = t2.code);

对于性能,您需要table1(code)上的索引。

我想不出更快的方式来运行此查询。

如果您需要快速获取此数据,则可能需要创建第二个表以及前两个表上的触发器。触发器将根据您的条件插入新行。这将摆脱union all并允许您构建索引,代价是更多的代码复杂性和空间使用。