我想知道,在下面所述的两个查询之间,关于性能的哪一个最佳,或者它们的表现相同?

第一个:[没有WHERE子句,只有AND与ON]

SELECT related_tabid AS tabid, label, t.name
  FROM relatedlists r
     INNER JOIN tab t
       ON t.tabid = r.tabid
          AND t.name = 'Leads'
          AND r.is_active=1  and r.related_tabid <> 0
          AND t.is_active=1
  ORDER BY label

第二个:[使用WHERE子句,AND与where关联,而不是ON]
SELECT related_tabid AS tabid, label, t.name
  FROM relatedlists r
     INNER JOIN tab t
       ON t.tabid = r.tabid
       WHERE t.name = 'Leads'
             AND r.is_active=1  and r.related_tabid <> 0
             AND t.is_active=1
  ORDER BY label

最佳答案

这两个查询是相同的,因为使用的联接是INNER JOININNER JOIN基本上只过滤与另一个表至少匹配的行。即使两个表互换,结果仍然相同。

但是,如果您通过LEFT JOIN加入它们,则这两个查询彼此不同,并且将产生不同的结果。

09-27 15:58