我尝试从我的表创建一个视图。 当我从 1 个表创建这样的视图时,它工作得很好:
CREATE VIEW v2 AS
SELECT section_id, section_name, count(*) AS num, count(*) as num1
FROM section_of_science
GROUP BY section_id;
select * from v2;
但是当我尝试从两个表创建视图时,它不起作用:
CREATE VIEW v3 AS
SELECT section_of_science.section_id, section_of_science. section_name,
scientific_areas.areas_name, count(*) AS num, count(*) as num1
FROM section_of_science,
scientific_areas
GROUP BY section_id;
select * from v3;
我收到此错误:
SELECT 列表的表达式 #3 不在 GROUP BY 子句中,并且包含 非聚合列"Lab3.scientific_areas.区域名称",不是 功能上依赖于 GROUP BY 子句中的列;这是 与 sql_mode=only_full_group_by 不兼容
我做错了什么?
如果您需要更多信息,请告诉我。
您的第一个查询有效,因为您是按主键聚合的。 您显然正在学习 SQL,因此您应该在GROUP BY
中包含所有未聚合的列。 稍后您可以了解小效率。
你的第二个应该写成:
SELECT ss.section_id, ss.section_name, ss.areas_name, count(*) AS num
FROM section_of_science ss join
scientific_areas as
ON -- JOIN CONDITIONS HERE
GROUP BY ss.section_id, ss.section_name, ss.areas_name;
笔记:
- 使用有意义的表别名(表名称的缩写(。
- 切勿在
FROM
子句中使用逗号。 - 始终使用正确、明确、标准、可读
JOIN
语法。 - 您的查询缺少
JOIN
的ON
条件。 - 列出
GROUP BY
中的所有未聚合列。