我有两个表(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;
这个视图给了我想要的东西,但实际上它的速度很慢,因为我有大数据。那么有另一种方法来获得我的结果吗?
答案 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
并允许您构建索引,代价是更多的代码复杂性和空间使用。