我完全是自学成才,因此我的知识存在明显差距。当我需要能够从多个表中获取数据时,我学会了如何进行连接。例如,如果我需要凭证表中的凭证编号,帐号和余额以及另一个表中的相应地址,我会这样做:
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
任何人都可以向我解释这样做的含义,而不是使用连接。正如我所说,在这种特殊情况下,它确实会返回与连接相同的数据,但是它会一直吗?
答案 0 :(得分:4)
它碰巧有相同的结果,但在某些时候它不会,因为你的查询有一个外连接,他们提供的语法是一个隐式的内连接。
答案 1 :(得分:3)
这是一个连接,只是一个隐含的连接。这是一个糟糕的编码实践,应该用内连接替换。
这个过时代码的问题在于,很容易意外地创建交叉连接,并且您的代码难以维护(您不应该在同一查询中混合隐式和显式连接,否则您可能会得到错误的结果)。