【发布时间】:2011-01-09 03:03:43
【问题描述】:
我有一个 SQL 问题,与 this 和 this 问题有关(但不同)。基本上我想知道如何避免嵌套查询。
假设我有一个巨大的工作表 (jobs),由一家公司在其历史上执行。这些作业的特点是年、月、位置和属于作业所用工具的代码。此外,我还有一个工具表 (tools),将工具代码转换为工具描述和有关工具的更多数据。现在他们想要一个网站,他们可以在其中使用下拉框选择年、月、位置和工具,然后将显示匹配的工作。我想仅使用与之前选择的年份、月份和位置匹配的相关工具来填充最后一个下拉列表,因此我编写了以下嵌套查询:
SELECT c.tool_code, t.tool_description
FROM (
SELECT DISTINCT j.tool_code
FROM jobs AS j
WHERE j.year = ....
AND j.month = ....
AND j.location = ....
) AS c
LEFT JOIN tools as t
ON c.tool_code = t.tool_code
ORDER BY c.tool_code ASC
我使用了这个嵌套查询,因为它比在整个数据库上执行 JOIN 并从中选择要快得多。它让我的查询时间减少了很多。但正如我最近读到的MySQL nested queries should be avoided at all cost,我想知道我在这种方法上是否错了。我应该以不同的方式重写我的查询吗?怎么做?
【问题讨论】:
标签: sql mysql nested-query