关于 sql中 group by 后跟主键是没有任何意义的
2013-08-30 00:12
225 查看
最近自己在搞一个项目,发现了一个sql 是这样写的
SELECT p.product_id, p.product_name, p.smallimg, p.type_id
FROM dbo.tbProduct AS p INNER JOIN
(SELECT type_id
FROM dbo.tbProduct
GROUP BY type_id) AS t ON p.type_id = t.type_id
后来研究发现,
一: group by 后面不能跟主键,因为主键是无法分组的,在这里复习一下主键的定义 :主键是用于惟一地标识表中的某一条记录,所以说他不具备任何实际意义,它不是什么有意义的 比如说成绩、分数、工资等
以下的你们不用看,这个是我自己做的一些笔记
其实上面这样查询完全是因为表的设计者没有想到产品会有这样的需求,或者说 表的设计者把 产品类型表 的主键 当成了产品类型的代号,本来主键就不应该有具体的任何意义,表的主键主要负责标识表中的某一行,在具体项目中不推荐把表的主键赋予任何的意义。
SELECT p.product_id, p.product_name, p.smallimg, p.type_id
FROM dbo.tbProduct AS p INNER JOIN
(SELECT type_id
FROM dbo.tbProduct
GROUP BY type_id) AS t ON p.type_id = t.type_id
后来研究发现,
一: group by 后面不能跟主键,因为主键是无法分组的,在这里复习一下主键的定义 :主键是用于惟一地标识表中的某一条记录,所以说他不具备任何实际意义,它不是什么有意义的 比如说成绩、分数、工资等
以下的你们不用看,这个是我自己做的一些笔记
其实上面这样查询完全是因为表的设计者没有想到产品会有这样的需求,或者说 表的设计者把 产品类型表 的主键 当成了产品类型的代号,本来主键就不应该有具体的任何意义,表的主键主要负责标识表中的某一行,在具体项目中不推荐把表的主键赋予任何的意义。
相关文章推荐
- 一个关于“OLE DB 提供程序 'sqloledb' 指出该对象中没有任何列”错误的解决方法
- 一个关于“OLE DB 提供程序 'sqloledb' 指出该对象中没有任何列”错误的解决方法
- sql关于group by之后把每一条记录的详情的某个字段值合并提取的方法
- 苹果开发者客服是没有收到任何通知:关于强制要求2017年1月1号之后 苹果所有应用必须https。
- sql中关于分组(group by)的理解
- 关于SQL语句的group by 以及如何 “先排序,再查询”
- 2012年11月7日----关于怎么实现没有验证通过之前任何发送数据包都从定向到内部的Web服务器
- SQL查找数据库中所有没有主键的数据表脚本
- 关于Sql的group by经典例子
- 关于“该列没有包含在聚合函数或 GROUP BY 子句中”
- sql 插入含有主键的列,提示:你没有该列的权限限制的解决方法
- Hive mapreduce SQL实现原理——SQL最终分解为MR任务,而group by在MR里和单词统计MR没有区别了
- SQL查找数据库中所有没有主键的数据表脚本
- 关于“该列没有包含在聚合函数或 GROUP BY 子句中”
- 有sum,没有group by的Sql用Linq怎么写
- 关于sql的UNION ,order by 、group by 、having等的用法
- 关于SQL字符串拼接以及“+”代表意义
- sqlserver中 在被引用表 'A' 中没有与外键 'c2' 中的引用列列表匹配的主键或候选键
- SQL查找数据库中所有没有主键的数据表脚本
- 一道SQL语句面试题,关于group by