• 2023年5月30日

sql查询使用inner join出现重复数据问题

inner join 的表会把该表符合on条件的数据全部列出来与前面的表、inner join表数据形成多余的数据例如:select * from table1 t1inner join table2 t2 on t2.col1 = t1.col1 and t2.col2=t2.col2where t1. col3=’x’ 结果会出现单独查询 select * from table1 where col3=’x’ 只有1条记录但是因为table2存在100条 t2.col2=t1.col2 and t2.col1=t1.col1 导致上面的inner join语句执行完会出现100条记录

详细内容

添加数据到数据库时提示Duplicate entry ” for key ‘xxx’

开发.net core程序时通过sqlsugar添加数据到数据库时添加1条记录后,添加第二条提示 Duplicate entry ” for key ‘xxx’,而这个xxx并非对应数据表的字段,这是因为另外定义了名为xxx的索引,而且将索引设定为UNIQUE,导致添加第一条后,添加第二条索引字段出现重复值而被数据库提示错误。 解决方法旧是把这个索引修改为index就ok,当然了,如果这个索引确实需要唯一,那就要排查你添加数据的逻辑了。

详细内容

使用旧data文件夹恢复mysql数据库

有批旧mysql数据需要恢复,程序员只保留了原本的data目录,为了导出旧数据需要恢复data目录中的数据库。 操作流程: 1、安装与旧mysql同一个版本的mysql,注意:如果可以最好版本完全一致,其次是在同一个子版本,例如5.7 2、停掉新安装的mysql 3、备份新mysql的data目录中的文件,然后清空data下面所有内容 4、将旧mysql的data目录中的内容复制到新mysql的data目录下,并设定好相应的权限(比如宝塔mysql目录用户是mysql、权限755、640都有,自己看下data目录本身的权限) 5、启动mysql(如果第4步的权限没设定好,一般是无法启动的,看下日志,确认下错误原因) 6、通过phpmyadmin或者其他mysql连接工具使用旧的mysql的账户密码登录 如果忘记旧mysql的root密码,可以按照如下步骤: 1、在mysql配置文件中的[mysqld]节点加入 skip-grant-tables 2、重启mysql服务 3、使用控制台命令mysql -u root登录mysql 4、刷新权限flush privileges; 5、重设密码:set password for ‘root’@’localhost’=’123456′; 注意橘色部分,如果你的root是允许所有机器登录的,直接把橘色去掉,否则会提示找不到用户的错误

详细内容

SqlSugar的GetList时提示Operand should contain 1 column(s)

给魔码挪车小程序写webapi某个功能时,写了如下代码: return base.GetList(it=>ids.Length>0 && SqlFunc.ContainArray(ids,it.Id)) 报错:Operand should contain 1 column(s) 经百度,提示是in子查询时出现了2个字段(in (select id,true from [xxx] where ….)) 所以上面修改为: return base.GetList(it=> SqlFunc.ContainArray(ids,it.Id)) 问题解决

详细内容

.Net6后台用户权限控制模块开发方案

用户权限控制系统是B/S架构管理系统的关键模块,网上有多种方案,本文将分享一个相对比较简单的方案。 后台用户权限包含: 1、菜单权限: 1.1 菜单加载:后台加载菜单时,只加载分配给用户的菜单 1.2 页面加载:只能进入授权菜单对应的url页面 2、接口权限: 2.1 API调用权限:view页面只能调用授权api 基于此,我们将通过Microsoft.AspNetCore.Mvc.Filters的IAuthorizationFilter接口,配合Mysql数据库实现该方案。 数据库设计: 类型 备注 id 自增 username varchar(32) 用户名 password varchar(64) 密码 role_id int 用户表 类型 备注 id 自增 name varchar(32) 菜单名称 path varchar(100) view地址 菜单表 类型 备注 id 自增 name varchar(32) 组名称 menu_list text 菜单列表 api_list text 接口列表 用户组 类型 备注 id 自增 name varchar(32) 接口名称 path varchar(100) 接口地址 接口表 关键代码: 代码中涉及到数据库的读写就不详细写了,使用的是sqlsugar,各位根据自己情况修改下即可! 至此,基础的权限控制关键已完成,只需要编写相应的后台页面即可实现通过后台设定用户组的菜单权限、接口权限等。

详细内容

.Net Core读取Mysql数据库提示Unable to convert MySQL date/time value to System.DateTime

.Net Core连接Mysql时提示“Unable to convert MySQL date/time value to System.DateTime”错误,解决办法有3种: 1、将Mysql的date/datetime字段默认值设置为null 2、在连接字符串增加:Convert Zero Datetime=True ; Allow Zero Datetime=True 3、将date/datetime字段设置为varchar

详细内容

sqlite遇到no such table

.net core 开发用的sqlite数据库,发布后运行提示 No such table :xxxx,问了度娘才知道是因为data source路径错了,找不到数据库,修改为正确的路径即可! 之所以提示找不到数据表而不是提示找不到数据库是因为系统会自动创建一个sqlite数据库,所以是空库,没有表,自然找不到表了。

详细内容

sql语句分页查询

select * from [tablename]  order by colname desc offset 要跳过的行数(一般是pagenum x pagesize) rows fetch next 要读取的行数(一般是pagesize) rows only 例如: select * from [user] order by id desc offset 40 rows fetch next 20 rows only 读取user表id倒序后41行起20行数据

详细内容

Sql修改字段长度

一般直接用Sql管理工具修改字段长度,会提示权限错误! 可以考虑用Alter来修改,而且一般情况字串长度从短改成长不会损害数据! ALTER TABLE users ALTER COLUMN email nvarchar(80) NULL; 表示把users表中的email字段重新定义为nvarchar类型,长度为80,允许null!  

详细内容

select count的统计某字段数据分别重复次数语句

表 A id      name   city 1     李先生    福州 2    王先生    厦门 3    张三    广州 4    李四    厦门 5    王五    福州 6     赵六    厦门 如果要统计厦门有几个人,福州有几个人,可以使用如下语句: select count(*) as c,city from [a] group by city order by c desc 可以得到如下结果 c     city 3   厦门 2  福州 1  广州    

详细内容