2017-07-03 32 views
0

我有一个查询下面,它从3个表中检索数据。忽略空列,并提高性能

select * 
from vendor_allocation as va, district as d, vendor as v 
where va.district_id = d.id and va.vendor_id = v.id 

在结果中有许多空列,大约需要315毫秒执行。我需要省略空列并更快地执行查询。我尝试使用COALESCE,但dint得到预期的结果。请帮忙。

+4

*从不*在'FROM'子句中使用逗号。 *总是*使用正确的,明确的'JOIN'语法。 –

+1

另外,您的预期结果是什么?所有供应商名单,附带地区? – Daniel

+3

要“省略”列,请勿将它们放入选择列表中。另一个很好的例子说明为什么select *不应该用在生产查询中。 –

回答

0

以下查询将只返回所有表中存在的值。如果要考虑vendor_allocation中可能没有分区/供应商中存在相应行的行,请使用左连接。这些行将作为连接表中的值返回null。

select * 
from vendor_allocation as va 
    join district as d using ON va.district_id = d.id 
    join vendor as v using ON va.vendor_id = v.id; 

使用LEFT JOIN

select * 
from vendor_allocation as va 
    left join district as d ON va.district_id = d.id 
    left join vendor as v ON va.vendor_id = v.id; 
0

这会给你的供应商名单,附有区。如果你不想要没有区域的人,请使用内部连接:

select v.VendorName, d.DistrictName 
from vendor as v 
left join vendor_allocation as va 
on v.id=va.vendor_id 
left join district as d 
on va.district_id =d.id