繁体   English   中英

在MySQL中联接与其他方法

[英]Joins vs. other methods in 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

谁能向我解释这样做而不是使用联接的含义。 如我所说,在这种特殊情况下,它确实返回与联接相同的数据,但是否总是如此?

它只是碰巧具有相同的结果,但在某些时候却不会,因为您的查询具有外部联接,因此它们为您提供的语法是隐式内部联接。

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

这是一个联接,只是一个隐式联接。 这是一种不良的编码实践,应替换为内部联接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM