2016-10-20 63 views
0

我正在查看一個SQL代碼,我不確定它的功能。 這是代碼:SQL與Join相同嗎?

SELECT * 
FROM dba.spro_lotesfrutagranel, 
    dba.variedades, 
    dba.productores 
WHERE (dba.variedades.espe_codigo = dba.spro_lotesfrutagranel.lote_espcod)  and 
    (dba.variedades.vari_codigo = dba.spro_lotesfrutagranel.vari_codigo) 

這是否與左連接相同?或不?

謝謝!

+4

這是一個簡單的INNER JOIN,只是用舊的遺留風格編寫的。 –

+2

這是一個過時的符號。推廣使用'JOIN' sintaxis,Aaron Bertrand寫了一篇不錯的文章[踢壞壞習慣:使用舊式JOINs](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad關於它的-habits-to-kick-using-old-style-joins.aspx)。 –

+1

它不僅僅是一個INNER JOIN ..它是一個在spro_lotesfrutagranel和各種變種之間的內部聯接..然後,這是CROSS JOINED產品 – JamieD77

回答

2

請勿使用old style join!使用table aliases!您的查詢應該等rewriten:

SELECT * 
FROM dba.spro_lotesfrutagranel sl 
INNER JOIN dba.variedades v 
ON v.espe_codigo = sl.lote_espcod and 
    v.vari_codigo = sp.vari_codigo 
INNER JOIN dba.productores p 
ON p.somecolumn = ... 

至於現在查詢是笛卡爾一些where語句加入,從spro_lotesfrutagranelvariedades所有行兩列兩者結合,然後連接與productores所有行。

注意:我添加了兩個鏈接,並附有一些解釋。

+0

謝謝!我試圖理解別人寫的代碼......!我不使用舊式! – CuchoAv

+0

這只是一個建議! ;)一些解釋。笛卡爾連接與某些where語句類似於內連接。 – gofr1

+0

我希望你得到你需要的澄清。我建議你重寫我的答案中提到的這部分查詢,如果你需要第三個表中的所有行,使用CROSS JOIN – gofr1