首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制SELECT中的SQL子查询

问限制SELECT中的SQL子查询
EN

Stack Overflow用户
提问于 2014-03-10 23:27:46
回答 2查看 366关注 0票数 1

我认为select语句中的子查询将受到FROM和/或JOIN语句的限制。因此,我的查询总是返回错误,因为子查询中有多行。

代码语言:javascript
复制
SELECT
      dbo.Countries.Name,
      dbo.Countries.ISO2,
      (SELECT dbo.CountryFields.Field 
       FROM dbo.CountryFields 
       WHERE dbo.CountryFields.Field = 'Population') AS Population
FROM
      dbo.CountryFields
      INNER JOIN
      dbo.Countries ON (dbo.CountryFields.Countries_Id = dbo.Countries.Countries_Id)

如何限制子查询中的行数?

我是否需要在子查询内也有一个inner join语句?我希望子查询继承自普通的SELECT,这样我就不需要手动限制了。

列"Field“包含的不仅仅是"Population”,我想在SELECT语句中显示更多的行,但是现在...我甚至连一个栏目都不能用。:-(

EN

回答 2

Stack Overflow用户

发布于 2014-03-10 23:35:02

我认为你想要这样的东西:

代码语言:javascript
复制
SELECT
      a.Name,
      a.ISO2,
      (SELECT TOP 1 b.Field FROM dbo.CountryFields b WHERE b.Countries_Id = a.Countries_Id AND b.Field = 'Population') AS Population,
      (SELECT TOP 1 b.Field FROM dbo.CountryFields b WHERE b.Countries_Id = a.Countries_Id AND b.Field = 'Capital') AS Capital,
      (SELECT TOP 1 b.Field FROM dbo.CountryFields b WHERE b.Countries_Id = a.Countries_Id AND b.Field = 'Area') AS Area
FROM
      dbo.Countries a

当然,有一些方法可以优化上面的查询,但这总是在可读性和速度之间进行权衡。

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2014-03-11 01:02:34

我认为这样的查询是正确的:

代码语言:javascript
复制
  SELECT
    C.Name,
    C.ISO2,
    ISNULL(CF_POP.Value,0) AS [Population], 
    ISNULL(CF_F2.Value,0) AS [Field2], 
    ISNULL(CF_F3.Value,0) AS [Field3] 
  FROM
    dbo.Countries AS C 
    LEFT JOIN dbo.CountryFields AS CF_POP ON (C.Countries_Id = CF_POP.Countries_Id) AND (CF_POP.Field = 'Population') 
    LEFT JOIN dbo.CountryFields AS CF_F2 ON (C.Countries_Id = CF_F2.Countries_Id) AND (CF_F2.Field = 'Field2') 
    LEFT JOIN dbo.CountryFields AS CF_F3 ON (C.Countries_Id = CF_F3.Countries_Id) AND (CF_F3.Field = 'Field3') 

在本例中,将CountryFields中的每一行作为一列进行连接。我使用LEFT JOIN,因为我不知道您的数据有多完整(如果您想看到空白,就必须删除ISNULL)。我还放入了Value列,因为我假设一定有第二列对应于CountryFields.Field。这也可以通过交叉应用来完成,但在这种情况下,语法将有所不同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22304299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档