2013-03-08 138 views
0

他们返回的行相同的计数,但我不知道,如果一个是事故等待发生,或一个是简单地“的首选方法”:这两个SQL语句是否相同?

SELECT duckbill.id, duckbill.pack_size, duckbill.description, duckbill.platypus_id, duckbill.department, duckbill.subdepartment, duckbill.unit_cost, duckbill.unit_list, duckbill.open_qty, duckbill.UPC_code, duckbill.UPC_pack_size, duckbill.crv_id, duckbill_platypuss.platypus_item 
FROM duckbill 
INNER JOIN duckbill_platypuss ON duckbill.platypus_id = duckbill_platypuss.platypus_id 

SELECT duckbill.id, duckbill.pack_size, duckbill.description, duckbill.platypus_id, duckbill.department, duckbill.subdepartment, duckbill.unit_cost, duckbill.unit_list, duckbill.open_qty, duckbill.UPC_code, duckbill.UPC_pack_size, duckbill.crv_id, duckbill_platypuss.platypus_item 
FROM duckbill, duckbill_platypuss 
WHERE (duckbill.platypus_id = duckbill_platypuss.platypus_id) 
+3

他们应该是等价的,但我会建议使用ANSI语法('INNER JOIN')以提高可读性。 – NullUserException 2013-03-08 16:35:49

+0

mysql解析器优化查询;所以从实际的角度来看也是一样的。 – palerdot 2013-03-08 16:37:00

+0

我没有使用MySQL,我正在使用祖父的SQL – 2013-03-08 16:38:27

回答

0

所以这是一个差异的原因是由于到执行的顺序。您可能没有注意到某些表组合上的差异,但在非常大的表上,您通常需要先使用JOIN进行过滤。

这篇文章给出了实现这一目的一些有用的信息,它看起来像:Order Of Execution of the SQL query

+2

-1我发现查询优化器不太可能为这些语句生成不同的计划。 – NullUserException 2013-03-08 16:37:14

+0

@NullUserException这是公平的,给出具体的查询。我想我更一般地考虑它。虽然,真的,你在上面评论中提出的观点是更恰当的一点;逗号连接通常是一个不管用什么的坏习惯。 – 2013-03-08 18:21:31