2017-07-03 57 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