如何在子查询中有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提到了两列,而它应该只有一列。计数(*)按顺序排列完全可以。