我想知道下面列出的2个查询之间的性能最佳,或者它们的表现相同吗?
第一个:[没有WHERE子句,只有和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
答案 0 :(得分:10)
两个查询都是相同的,因为使用的连接是INNER JOIN
。 INNER JOIN
基本上它只过滤在另一个表上至少匹配的行。即使这两个表是交换的,结果仍然是相同的。
但是如果你通过LEFT JOIN
加入它们,那么这两个查询会有所不同,会产生不同的结果。
答案 1 :(得分:2)
在我看来,两个查询之间的唯一区别是一个在WHERE子句中有t.name = 'Leads'
,而在JOIN子句中有一个。{正确的吗?
两者之间没有区别。 SQL优化器将以相同的方式处理它们。对每个进行解析以验证。
答案 2 :(得分:0)
理论上,第一个查询只是想在'where'中放置文本比较,然后加入表的union的'logic'定义,'where'仅用于指定值比较时会有所不同 其中t.name ='Leads'; 问候