INNER JOIN与列上的条件 - 高效的方式

时间:2014-12-21 07:01:07

标签: mysql sql join inner-join

我有两张桌子:

Service_BD:

enter image description here

LOB:

enter image description here

我现在要求删除LOB表中的冗余列,如industryId等,并使用Service_BD表获取industryId的LOB,然后使用LOB表获取特定LOB的详细信息。

我正在尝试使用内部联接获取单个SQL查询,但结果很奇怪。

当我运行这样一个简单的SQL查询时:

SELECT industryId, LobId 
FROM Service_BD 
WHERE industryId = 'I01' 
GROUP BY lobId

结果是9行:

enter image description here

现在,我想加入其余的LOB列(当然减去丢弃的列)以获取LOB详细信息。所以我使用以下查询:

SELECT * 
FROM LOB 
INNER JOIN Service_BD ON Service_BD.lobId = LOB.lobId 
WHERE Service_BD.industryId = 'I01' 
GROUP BY Service_BD.lobID

enter image description here

我得到了预期的结果,但我怀疑这是否是最有效的方式。我怀疑是因为Service_BD和LOB表都有大量的数据,但我觉得如果首先执行GROUP BY Service_BD.lobID会降低WHERE条件的时间复杂度。

只是想知道这是否是编写查询的正确方法,还是有更好的方法来做同样的事情。

1 个答案:

答案 0 :(得分:1)

你还没有提到你正在使用哪个数据库引擎,所以我猜你使用的是MySQL。 In most cases GROUP BY仅在符合WHERE条件的行上完成。因此GROUP BY仅对INNER JOINWHERE子句的获取结果执行。

我不认为

SELECT * 
FROM LOB INNER 
JOIN Service_BD ON Service_BD.lobId = LOB.lobId 
WHERE Service_BD.industryId = 'I01' 
GROUP BY Service_BD.lobID

提高了查询的性能,但它确实消除了结果中的重复lobID。另外,除了引入HAVING条款之外,我没有看到任何其他更好的方法来消除重复,但我认为它不会改善查询的性能。