如何在子查询中有2列但忽略其中的一个?

问题描述:

我想在我的数据库上执行这个查询,这是查询基于第三个表的结果的两个表。如何在子查询中有2列但忽略其中的一个?

SELECT * 
FROM ads_user AS u 
     INNER JOIN ads_medium AS m 
       ON u.id = m.owner_id 
WHERE m.id IN (SELECT medium_id, 
            Count(*) AS count 
          FROM ads_click 
          WHERE time > '2017-01-01' 
          GROUP BY medium_id 
          ORDER BY count DESC 
          LIMIT 100); 

正如你看到的,我用我的子查询其count列是必要的整个查询工作的两列。不幸的是PostgreSql抛出了subquery has too many columns错误。

有没有解决方法?

只需将计数作为选定列移除并将(*)添加到按顺序。因此:

SELECT * 
FROM ads_user AS u 
     INNER JOIN ads_medium AS m 
       ON u.id = m.owner_id 
WHERE m.id IN (SELECT medium_id 
          FROM ads_click 
          WHERE time > '2017-01-01' 
          GROUP BY medium_id 
          ORDER BY count(*) DESC 
          LIMIT 100); 

Postgres抱怨,因为你的IN提到了两列,而它应该只有一列。计数(*)按顺序排列完全可以。