sql 学习

本文介绍如何通过SQL语句来添加字段、更新数据、删除重复记录等实用技巧,并展示了复杂的联表查询及聚合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ALTER TABLE `pm_sys_packages`
ADD COLUMN `APP_NAME`  varchar(64) NULL AFTER `PACKAGE_USE_TYPE`,
ADD COLUMN `APP_CODE`  varchar(32) NOT NULL AFTER `APP_NAME`;

cancat 拼接:

update pm_sys_packages t,sm_system s set t.APP_CODE = 
CONCAT(s.SYS_NAME,'-',t.PACKAGE_ID) 
where t.SYS_ID = s.SYS_ID and 
( t.APP_CODE = '' or t.APP_CODE is null);
update pm_sys_packages pm,
( 
SELECT DISTINCT
T.SYS_ID,
T.packageId,
T.PACKAGE_NAME,
T.packageUseType,
T.packageType,
T.PACKAGE_USE_TYPE_NAME,
CONCAT(
T.packageUseType,
T.packageType
) as appName,
T.REPOS_NAME,
T.PACKAGE_DESC
FROM
(
SELECT
sm.SYS_ID,
pa.PACKAGE_NAME,
 (
 CASE
 WHEN pa.PACKAGE_TYPE = '163' THEN
 '应用发布包'
 WHEN pa.PACKAGE_TYPE = '164' THEN
 '静态发布包'
 END
 ) packageType,
 (
 CASE
 WHEN pa.PACKAGE_USE_TYPE = '183' THEN
 '前台'
 WHEN pa.PACKAGE_USE_TYPE = '184' THEN
 '后台'
 WHEN pa.PACKAGE_USE_TYPE = '298' THEN
 '中台'
 WHEN pa.PACKAGE_USE_TYPE = '294' THEN
 ''
 END
 ) packageUseType,
pa.PACKAGE_USE_TYPE_NAME,
pa.PACKAGE_ID AS packageId,
re.REPOS_NAME,
1,
pa.PACKAGE_DESC
FROM
sm_system sm,
pm_sys_packages pa,
cf_repository re
WHERE
sm.SYS_ID = pa.SYS_ID
AND re.RELATE_ID = sm.SYS_ID

AND re.TYPE = 115
) T) tab  set pm.APP_NAME = tab.appName where pm.PACKAGE_ID = tab.packageId  
and ( pm.APP_NAME = '' or pm.APP_NAME is null);

 

分组 获取 的数据进行去重筛选:(对查询回来属性列表中,部分属性distinct,不能整体distinct),所以使用group by

 SELECT 
 t1.GROUP_ID,t1.ARTIFACT_ID,t3.VERSION, MAX(t1.CREATE_TIME) ,
 MAX(t2.UPDATE_TIME) 
 FROM 
 CF_BRANCH_BUILD_DETAILTASK t1 INNER JOIN CF_BRANCH_BUILD_BASICINFO  t2
 ON t1.BUILD_ID=t2.ID AND t2.BRANCH_STATUS='0' AND t2.BRANCH_ID <> '0'
 INNER JOIN CF_BRANCH t3 ON t2.BRANCH_ID=t3.BRANCH_ID
 INNER JOIN BM_PACKAGE_CONFIG t4 ON t2.SYS_ID=t4.SYS_ID 
 AND t4.PACKAGE_TYPE='MAVEN'
 WHERE
	t1.CREATE_TIME>='20170701' AND t1.CREATE_TIME<='20170801'
    AND t1.BUILD_STATUS='2'
	GROUP BY t1.GROUP_ID,t1.ARTIFACT_ID,t3.VERSION

 

删除一个表中重复的数据,且保留ID最大的一列(极为高效):

 

DELETE AA FROM cf_branch_sonaranalyse AA , (SELECT DISTINCT A.ID,A.DETAIL_ID  
FROM cf_branch_sonaranalyse A,cf_branch_sonaranalyse B WHERE 
A.DETAIL_ID=B.DETAIL_ID AND A.ID<B.ID) 
BB WHERE AA.ID=BB.ID;

 

连表查询,自己的幼稚错误:

SELECT 
 a.BUILD_CONFIG_ID AS buildConfigId,
 a.APP_ID AS appID,
 a.APP_NAME AS appName,
 a.PACKAGE_VERSION AS packageVersion,
 a.PACKAGE_INNER_VERSION AS packageInnerVer,
 a.PACKAGE_EXCLUDE_UPGRADE AS packageExcludeVer,
 a.PACKAGE_UPGRADE_MSG AS packageUpgradeMsg,
 a.SYS_ID AS sysId,
 a.SYS_ENNAME AS sysEnname,
 a.REPOS_NAME AS reposName,
 a.OPERATOR AS operator,
 a.OPERATE_TIME AS operateTime,
 a.PKG_OSS_PATH AS pkgOSSPath,
 a.BUILD_RECORD_ID AS buildID,
 a.BUILD_NAME AS buildName,
 a.BUILD_VERSION AS buildVersion,
 a.QR_DOWN_URL AS appQRDownloadUrl,
 a.PACKAGE_TYPE AS packageType,
 a.BRANCH_URL AS BranchUrl,
 a.BRANCH_ID AS BranchId,
 a.VERSION_ID AS versionId,
 ai.APP_ICON_URL AS appIconUrl
FROM mobile_app_build_record_pkginfo a
LEFT JOIN app_info ai ON a.BUILD_CONFIG_ID = ai.BUILD_CONFIG_ID
LEFT JOIN build_record b ON a.BUILD_RECORD_ID = b.build_record_id
LEFT JOIN build_task c ON b.build_task_id = c.build_task_id
WHERE c.task_name=#{buildTaskName}
LIMIT 1

这是正确的,但是自己却写下:

SELECT
	a.BUILD_CONFIG_ID AS buildConfigId,
	a.APP_ID AS appID,
	a.APP_NAME AS appName,
	a.PACKAGE_VERSION AS packageVersion,
	a.PACKAGE_INNER_VERSION AS packageInnerVer,
	a.PACKAGE_EXCLUDE_UPGRADE AS packageExcludeVer,
	a.PACKAGE_UPGRADE_MSG AS packageUpgradeMsg,
	a.SYS_ID AS sysId,
	a.SYS_ENNAME AS sysEnname,
	a.REPOS_NAME AS reposName,
	a.OPERATOR AS operator,
	a.OPERATE_TIME AS operateTime,
	a.PKG_OSS_PATH AS pkgOSSPath,
	a.BUILD_RECORD_ID AS buildID,
	a.BUILD_NAME AS buildName,
	a.BUILD_VERSION AS buildVersion,
	a.QR_DOWN_URL AS appQRDownloadUrl,
	a.PACKAGE_TYPE AS packageType,
	a.BRANCH_URL AS BranchUrl,
	a.BRANCH_ID AS BranchId,
	a.VERSION_ID AS versionId,
	ai.APP_ICON_URL AS appIconUrl
FROM
	mobile_app_build_record_pkginfo a,
	app_info ai
LEFT JOIN build_record b ON a.BUILD_RECORD_ID = b.build_record_id
LEFT JOIN build_task c ON b.build_task_id = c.build_task_id
WHERE
	c.task_name =?
AND a.BUILD_CONFIG_ID = ai.BUILD_CONFIG_ID
LIMIT 1

当然连表可以直接使用where,但是不能where联合 与 join查询混用:

select a.name,b.email from a,b 
where a.nameid=b.nameid and a.fenleiid=3

查询每天数据的峰值:

SELECT
DATE_FORMAT(CREATE_TIME,'%Y-%m-%d')  as T ,count(*)
FROM
cf_branch_build_detailtask
WHERE
CREATE_TIME >= '20180401'
AND CREATE_TIME <= '20180418'
GROUP BY T;

mysql 使用查询的数值去修改数据:

UPDATE `env` AS A INNER JOIN project AS B ON A.project_id=B.id SET A.`name` = 
CONCAT(B.`name`, '-', A.branch_name);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值