2010-12-01 72 views
1

我完全是自学的,所以在我的知识中存在明显的差距。当我需要从多个表中获取数据时,我学会了如何进行连接。例如,如果我需要一个凭证号,账号,并从凭证表的平衡,并从另一个表中的相应的地址,我应该这样做:mySQL中的连接与其他方法

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v 
left join addresses a on v.acctID = a.id 

这将返回所有的凭证记录,任何地址碰巧存在(在这种情况下,即使没有相应的地址,我们也要返回凭证记录,因此左连接。)

我最近继承了一些代码,似乎试图获取相同的数据(并在这种情况下,它确实返回正确的记录),它是这样做的:

select v.voucherNbr, v.balanceInit, v.acctID, a.address, a.city from vouchers v, addresses a 
where v.acctID = a.id 

任何人都可以向我解释这样做,而不是使用连接的影响。正如我所说的,在这种特殊情况下,它确实会返回与连接相同的数据,但它会一直存在吗?

回答

3

这是一个连接,只是一个隐含的连接。这是一种糟糕的编码习惯,应该用一个内部连接来代替。

这个过时代码的问题在于,意外创建交叉连接并且代码难以维护(您不应该在同一个查询中混合隐式和显式连接,否则您可能会得到错误的结果)非常容易。