有没有更有效的方法来执行这个嵌套的 SQL 查询?
Is there a more efficient way to execute this nested SQL query?
我正在编写一个查询来填充用户表单上的 select 框,它工作正常,但是当我查看 SQL 时,我觉得应该有更好、更高效的方法写它的方法。请注意下面的两个嵌套 SELECT 来自相同的 table.
我想知道是否有一个 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所在县
如果需要,这里是对查询和我的意图的解释:
我有一个 members table,其中县字段存储为一个整数,链接到一个名为 counties[的查找 table =33=]。我还想将县结果过滤到会员所在的州。
查询正在填充 HTML select 元素,我想预 select 成员所在的县。我的 PHP 唯一可用的信息(无需 运行 第二次查询以获取更多信息)是会员 ID。
所以查询需要 return 县 ID、县名称和某种标识符,让我知道哪个记录与成员匹配(我只是使用链接县字段和我的代码将对此进行检查)。
数据库是从 PDO ODBC 连接访问的 MDB 文件。
您可能不需要任何子查询,但可能需要 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
我正在编写一个查询来填充用户表单上的 select 框,它工作正常,但是当我查看 SQL 时,我觉得应该有更好、更高效的方法写它的方法。请注意下面的两个嵌套 SELECT 来自相同的 table.
我想知道是否有一个 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所在县
如果需要,这里是对查询和我的意图的解释:
我有一个 members table,其中县字段存储为一个整数,链接到一个名为 counties[的查找 table =33=]。我还想将县结果过滤到会员所在的州。
查询正在填充 HTML select 元素,我想预 select 成员所在的县。我的 PHP 唯一可用的信息(无需 运行 第二次查询以获取更多信息)是会员 ID。
所以查询需要 return 县 ID、县名称和某种标识符,让我知道哪个记录与成员匹配(我只是使用链接县字段和我的代码将对此进行检查)。
数据库是从 PDO ODBC 连接访问的 MDB 文件。
您可能不需要任何子查询,但可能需要 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