帮忙解释下这段sql 语句

来源:百度知道 编辑:UC知道 时间:2024/07/02 12:45:14
update AM_subjbala set pk_dept = (
select f.checkvalue from STG_gl_freevalue f where f.freevalueid = AM_subjbala.pk_deinf1
and f.checktype = '00010000000000000002'
);

就象没有加标点符号的文章,先把格式调整好:
UPDATE AM_subjbala
SET pk_dept = (
SELECT f.CheckValue
FROM STG_gl_FreeValue AS f
WHERE (f.freevalueid = AM_subjbala.pk_deinf1)
AND (f.checktype = '00010000000000000002')
)
把AM_subjbala表内,pk_dept字段替换成STG_gl_FreeValue里相关记录(f.freevalueid = AM_subjbala.pk_deinf1)且CheckType为'00010000000000000002')的CheckValue字段。

这里(f.freevalueid = AM_subjbala.pk_deinf1)是一个相关子查询,对于SQL初学者来说可能比较难以理解。

以上语句有两个问题,
1.如果符合条件的记录不存在,那么UPDATE后的值为NULL,该如何处理。是否保留NULL还是替换成某默认值;解决方案ISNULL函数
2.如果符合条件的记录多于1条,那么该取哪一条记录?解决方案:TOP 1,ORDER BY

更新AM_subjbala 表中的set pk_dept 列

他的值是STG_gl_freevalue表中checktype 等于00010000000000000002

并且 freevalueid 和AM_subjbala表pk_deinf1相等的checkvalue 列记录

不知道你看的明白不