我有两张桌子:
Service_BD:
LOB:
我现在要求删除LOB表中的冗余列,如industryId等,并使用Service_BD表获取industryId的LOB,然后使用LOB表获取特定LOB的详细信息。
我正在尝试使用内部联接获取单个SQL查询,但结果很奇怪。
当我运行这样一个简单的SQL查询时:
SELECT industryId, LobId
FROM Service_BD
WHERE industryId = 'I01'
GROUP BY lobId
结果是9行:
现在,我想加入其余的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
我得到了预期的结果,但我怀疑这是否是最有效的方式。我怀疑是因为Service_BD和LOB表都有大量的数据,但我觉得如果首先执行GROUP BY Service_BD.lobID
会降低WHERE
条件的时间复杂度。
只是想知道这是否是编写查询的正确方法,还是有更好的方法来做同样的事情。
答案 0 :(得分:1)
你还没有提到你正在使用哪个数据库引擎,所以我猜你使用的是MySQL。 In most cases GROUP BY
仅在符合WHERE
条件的行上完成。因此GROUP BY
仅对INNER JOIN
和WHERE
子句的获取结果执行。
我不认为
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
条款之外,我没有看到任何其他更好的方法来消除重复,但我认为它不会改善查询的性能。