有没有更有效的方法来执行这个嵌套的SQL查询?

时间:2015-03-13 23:18:02

标签: sql ms-access odbc subquery correlated-subquery

我正在编写一个查询来填充用户表单上的选择框,但它工作正常但是当我查看SQL时,我觉得应该有更好,更有效的方法来编写它。请注意,下面两个嵌套的SELECT来自同一个表。

我想知道是否有一个SQL技巧我可以添加到我的保留曲目,因为我不时会这样做这样的查询。或许我的方法有些标准草率?任何反馈都表示赞赏。

这是SQL:

SELECT c.id, c.county_name, adr.county
FROM (SELECT id, county_name FROM counties WHERE state = (SELECT state FROM members WHERE id = 53)) AS c
    LEFT JOIN (SELECT county FROM members WHERE id = 53) AS a ON c.id = a.county;

以下是结果(部分): http://i.stack.imgur.com/Jawfa.png 右栏中的“3022”是53个县的成员。

如果需要,这里是对查询和我的意图的解释:

我有一个成员表,其中县字段存储为一个整数,链接到名为 counties 的查找表。我还想将县结果过滤到成员国。

查询正在填充HTML select元素,我想预先选择成员的县。我的PHP可用的唯一信息(没有运行第二个查询以获得更多)是成员ID。

因此查询需要返回县id,县名和某种标识符,以便让我知道哪个记录与成员匹配(我刚刚使用了链接县字段,我的代码将检查它)。

数据库是从PDO ODBC连接访问的MDB文件。

1 个答案:

答案 0 :(得分:1)

您可能不需要任何子查询,但可能需要self-join

SELECT counties.id, counties.county_name, members_1.county
FROM counties 
INNER JOIN members ON counties.state = members.state
LEFT JOIN members_1 ON counties.id = members_1.county
WHERE members.id = 53 AND members_1.id = 53