加入mySQL中的其他方法

时间:2010-12-01 16:16:47

标签: mysql sql

我完全是自学成才,因此我的知识存在明显差距。当我需要能够从多个表中获取数据时,我学会了如何进行连接。例如,如果我需要凭证表中的凭证编号,帐号和余额以及另一个表中的相应地址,我会这样做:

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

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

2 个答案:

答案 0 :(得分:4)

它碰巧有相同的结果,但在某些时候它不会,因为你的查询有一个外连接,他们提供的语法是一个隐式的内连接。

http://en.wikipedia.org/wiki/Join_(SQL

答案 1 :(得分:3)

这是一个连接,只是一个隐含的连接。这是一个糟糕的编码实践,应该用内连接替换。

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