2 sql sql-server sql-server-2008
SELECT DISTINCT
t1.name as t1_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods,
t2.name as t2_name
FROM Table1 t1
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE t1.id='23'
GROUP BY t1.name
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,我收到以下错误:
Column 'Table2.name' is invalid in the select list because it is not contained
in either an aggregate function or the GROUP BY clause.
Run Code Online (Sandbox Code Playgroud)
怎么写这个查询?
错误很明显,要么使用聚合函数,t2.name要么将其添加到GROUP BY,它取决于您要查找的所需结果:
SELECT
t1.name as t1_name,
t2.name as t2_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods
FROM Table1 hi
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE t1.id='23'
GROUP BY t1.name, t2.name;
Run Code Online (Sandbox Code Playgroud)
这个错误是有道理的,因为它必须知道从t2.name每个组中选择哪个值t1.name?它应该选择max,min等,否则GROUP BY它.
此外,删除DISTINCT没有必要GROUP BY.