【问题标题】:sql subquery from where insql子查询来自哪里
【发布时间】:2018-04-12 13:45:41
【问题描述】:

我正在按照这些思路写一些东西:

select fielda,fieldb,
       (select sum(field1)-sum(field2) as fieldc 
        from tableb 
        where fieldid = list_of_ids[i]) 
from tablea 
where fieldid in (list_of_ids);

在子查询中,我想使用外部 where 子句中的值。所以如果 list_of_ids 是 123,456,789,那么子查询中的 fieldid 将是 123,第二个是 456,等等。这可能吗?

【问题讨论】:

  • 您使用的是哪个DBMS product? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加标签postgresqloraclesql-serverdb2、...
  • ,不是字段...
  • Postgres,但佩林的回答有效

标签: sql subquery where-in


【解决方案1】:

您只需要使用ta.fieldid 而不是list_of_ids[i]

select ta.fielda,ta.fieldb,
       (select sum(tb.field1)-sum(tb.field2) as fieldc 
        from tableb tb
        where tb.fieldid = ta.fieldid ) 
from tablea  ta
where ta.fieldid in (list_of_ids);

【讨论】:

    【解决方案2】:

    子查询锚定到外部查询中的单个记录。

    select fielda,fieldb,
           (select sum(field1)-sum(field2) as fieldc 
            from tableb 
            where tableb.fieldid = tablea.fieldid) 
    from tablea 
    where tablea.fieldid in (list_of_ids);
    

    只需使用简单的比较运算符将您的子查询与外部查询关联起来,您的子查询也会与外部查询找到的任何 fieldid 进行比较。

    【讨论】:

      【解决方案3】:

      试试这个代码:

      select ta.fielda,ta.fieldb,
             (select sum(field1)-sum(field2) as fieldc 
              from tableb tb
              where tb.fieldid = ta.fieldid ) 
      from tablea  ta
      where ta.fieldid in (list_of_ids);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 2019-12-01
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多