我正在修改一个先前已经加入两个表的查询,但是现在需要添加第三个,我正在努力应对一些条件。
这是原始查询:
$sql = "SELECT COUNT(act.rowId) q4Act
FROM accounts a
LEFT JOIN leads l ON a.accountId = l.accountId
LEFT JOIN activities act ON act.leadId = l.leadId AND act.classification = 'Positive' AND activityDate >= '2016-10-31' AND activityDate < '2017-02-01'
WHERE a.accountId = '$id'
GROUP BY a.accountName ";
这很好,确保活动表中的唯一结果符合三个AND条件,accountId
是被查询的结果。
但是,我拆分了两个表并希望更新此查询。我的第一次尝试是下一个查询,我在其中添加了新的左连接,从第一个中移除了条件并将其添加到第二个。然而,这会产生完全不同的结果。
$sql = "SELECT COUNT(act.rowId) q4Act
FROM accounts a
LEFT JOIN leads l ON a.accountId = l.accountId
LEFT JOIN activities act ON act.leadId = l.leadId AND activityDate >= '2016-10-31' AND activityDate < '2017-02-01'
LEFT JOIN interestingMoments im ON im.rowId = act.imId AND im.classification = 'Positive'
WHERE a.accountId = '$id'
GROUP BY a.accountName ";
我的下一次尝试是将连接下面的新表移动到这样的连接:
$sql = "SELECT COUNT(act.rowId) q4Act
FROM accounts a
LEFT JOIN leads l ON a.accountId = l.accountId
LEFT JOIN activities act ON act.leadId = l.leadId AND activityDate >= '2016-10-31' AND activityDate < '2017-02-01'
LEFT JOIN interestingMoments im ON im.rowId = act.imId
WHERE a.accountId = '$id'
AND im.classification = 'Positive'
GROUP BY a.accountName ";
如果有正数,上面会返回相同的结果,但它不像第一个查询那样返回a 0 count
。这不是什么大问题,但我想看看这是否是构建此查询的正确方法。
这是最好的方式,还是我应该采用不同的方式?
答案 0 :(得分:1)
将约束放在JOIN上而不是WHERE子句中确实没有区别。如果表格很大,可能会影响运行SELECT的时间,但这种差异可能很小,而且索引可能仍然可以减轻这种差异。