列在选择列表中无效
问题描述:
SELECT *
FROM Book b
WHERE b.book_id IN (SELECT DISTINCT(c.book_id)
FROM Copy c
WHERE c.copy_id IN (SELECT copy_id
FROM Loan
WHERE Datediff(DAY, Getdate() - 180, loan_date) > 180)
GROUP BY c.copy_id
HAVING Count(copy_id) > 10)
当我运行此查询时,出现错误。列在选择列表中无效
“Column'Copy.Book_id'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”
答
当你想有一个字段select
后在select
语句group by
一部分,你应该group by
太后加上它的名称和不使用distinct
关键字,我认为你需要像这样的代码:
SELECT c.book_id
FROM Copy c
WHERE c.copy_id IN (SELECT copy_id
FROM Loan
WHERE Datediff(DAY, Getdate() - 180, loan_date) > 180)
GROUP BY c.book_id
HAVING Count(copy_id) > 10
答
您正在按c.copy_id
分组,但您想选择c.book_id
。这是无效的。您可以从以下考虑一个选项:
-
group by
c.book_id
-
group by
c.book_id
除了c.copy_id
- 没有在内部查询
-
select
c.copy_id
使用group by
和外部使用它选择以及
我相信第一个选项在这种情况下最有意义。
答
导致错误的问题是,您在子查询中的错误列上分组,它应该是b.book_id
。
然后,我认为你是datediff比较可能有错误的顺序日期(但这取决于你的意图,我可能误解了你想要做的)。
所以与变化也许此查询可能是你在找什么:
SELECT * FROM Book b
WHERE b.Book_Id IN (
SELECT c.Book_id
FROM Copy c
JOIN Loan l ON c.copy_id = l.copy_id
WHERE DATEDIFF(DAY, Loan_date, getdate()-180) > 180
GROUP BY c.Book_Id
HAVING COUNT(l.Copy_Id) > 10
)
的[?什么是“无效,未包含在聚合函数”消息的意思(可能重复的HTTP ://stackoverflow.com/questions/18258704/what-does-the-invalid-not-contained-in-either-an-aggregate-function-message-m) – Tanner 2015-04-29 13:38:13