【问题标题】:Nesting queries in SQLSQL 中的嵌套查询
【发布时间】:2012-09-17 21:28:16
【问题描述】:

我的查询的目标是返回国家名称及其国家元首,如果它的 headofstate 的名称以 A 开头,并且该国家的首都有超过 100,000 人使用嵌套查询。

这是我的查询:

SELECT country.name as country, 
       (SELECT country.headofstate 
        from country 
        where country.headofstate like 'A%')      
from country, city 
where city.population > 100000;

我尝试过反转它,将它放在 where 子句中等。我没有得到嵌套查询。我只是收到错误,例如“子查询返回多行”等。如果有人可以帮助我了解如何订购它,并解释为什么它需要以某种方式,那就太好了。

【问题讨论】:

    标签: sql nested


    【解决方案1】:

    如果必须“嵌套”,这将是完成工作的一种方式:

    SELECT o.name AS country, o.headofstate 
    FROM   country o
    WHERE  o.headofstate like 'A%'
    AND   (
        SELECT i.population
        FROM   city i
        WHERE  i.id = o.capital
        ) > 100000
    

    不过,JOIN 会比相关子查询更有效。会不会,给你这个任务的人自己没有跟上进度?

    【讨论】:

    • 如果我使用这种 sql 查询,那么它会向我显示如下错误。操作数应包含 1 列你能帮帮我吗.... 我的 Sql 查询是 SELECT s.* FROM j5749_faculty_subjects as s WHERE s.subjectid='1' AND ( SELECT a.* FROM j5749_facultyavailablity as a WHERE a.facultyid = s.facultyid AND a.timeid='3' )
    • @amit:查看我查询的最后一部分:> 100000。你没有等价物。你可能想要EXISTSSee this example. 否则,开始一个包含所有详细信息的新问题
    • 很好,看起来你也可以在FROM 子句中做到这一点! -- 只需在括号内嵌套一个查询,并为其命名 -- 然后您可以像 SELECTWHEREJOIN 子句等中的表一样引用它(例如 SELECT s.* FROM (SELECT [blah] FROM [blaz] WHERE [foo]) AS s WHERE s.whatever = 'foop'。)
    【解决方案2】:

    你需要join这两个表,然后在where子句中过滤结果:

    SELECT country.name as country, country.headofstate 
    from country
    inner join city on city.id = country.capital
    where city.population > 100000
    and country.headofstate like 'A%'
    

    【讨论】:

    • 再次感谢您的帮助!尽管这很有效,而且很有意义,但我应该使用嵌套查询。你有其他选择吗?
    • @ZAX 如果您需要嵌套查询,请查看我的答案... :-)
    • @ZAX 我敢问你到底为什么应该使用嵌套查询?这是作业吗?因为嵌套查询甚至不是这个问题的最佳解决方案
    • 我正在阅读一本 sql 书。我认为我还不一定会使用内部连接,尽管我有一些背景并且了解您对查询的操作。如果你愿意的话,我想它会试图“带上我”。
    • @ZAX Inner joins 只是显式连接。如果您需要查询位于 2 个不同表中的数据,最好的选择(在性能和可读性方面)是加入,无论是隐式还是显式
    【解决方案3】:

    在我看来,嵌套查询的唯一位置是在 WHERE 子句中,例如

    SELECT country.name, country.headofstate
    FROM country 
    WHERE country.headofstate LIKE 'A%' AND 
    country.id in (SELECT country_id FROM city WHERE population > 100000)
    

    除此之外,我必须同意 Adrian 的观点:为什么要使用嵌套查询?

    【讨论】:

      【解决方案4】:

      下面的查询应该可以帮助您实现您想要的。

      select scountry, headofstate from data 
      where data.scountry like 'a%'and ttlppl>=100000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多