我正在编写一个查询来填充用户表单上的选择框,但它工作正常但是当我查看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文件。
答案 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