我有一个SQL问题,涉及this和this问题(但不同)。基本上我想知道如何避免嵌套查询。在这种情况下如何避免嵌套的SQL查询?
比方说,我有一个巨大的工作表(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,我想知道我在这种方法是否是错误的。我应该重写我的查询吗?如何?
因为我还没有建立表之间的外键关系。在我这样做后,我可以切换到JOIN,但目前仍可以使用尚未知的工具代码添加到数据库中。我需要这些工作仍然弹出选择。 – thomaspaulb 2010-01-25 14:47:22