34,594
社区成员
发帖
与我相关
我的任务
分享
SELECT c.*,
p.id
from #org_dep1 c
JOIN #org_dep1 p
ON c.idparent = p.sCode
-- 这俩个等价的
SELECT #org_dep1.*,A.ID FROM #org_dep1,#org_dep1 AS A where #org_dep1.idparent=a.sCode
update #org_dep1 set #org_dep1.[idparent]=a.id from #org_dep1,#org_dep1 AS a where #org_dep1.idparent=a.sCode
-- 这样写也是等价于下面的
update c
set c.idparent = p.id
from #org_dep1 c
JOIN #org_dep1 p
ON c.idparent = p.sCode
/
ID sCode sName idEmployee sMemo Created CreatedBy Updated UpdatedBy pathid idparent bfail
40C6011581E24F91A3B26310EA867BEB subcomp19 重庆** subcomp9 重庆**有限公司 NULL NULL NULL NULL 9 6F6E55C2B2C84240B482D58E0B680170 0
6F6E55C2B2C84240B482D58E0B680170 subcomp9 通关事业部 subcomp1 通关事业部 NULL NULL NULL NULL 1 subcomp1 0
/
但是 我不懂 为什么
update #org_dep1 set #org_dep1.[idparent]=a.id from #org_dep1,#org_dep1 AS a where #org_dep1.idparent=a.sCode
这句可以 ,而且要在from 后面加 update的那张表
SELECT c.*,
p.id
from #org_dep1 c
LEFT JOIN #org_dep1 p
ON c.idparent = p.sCode
SELECT c.*,
p.id
from #org_dep1 c
JOIN #org_dep1 p
ON c.idparent = p.sCode
CREATE TABLE #org_dep1(
[ID] [varchar](32) NOT NULL,
[sCode] [varchar](200) NULL,
[sName] [varchar](200) NULL,
[idEmployee] [varchar](32) NULL,
[sMemo] [varchar](2000) NULL,
[Created] [datetime] NULL,
[CreatedBy] [varchar](32) NULL,
[Updated] [datetime] NULL,
[UpdatedBy] [varchar](32) NULL,
[pathid] [varchar](3300) NULL,
[idparent] [varchar](32) NULL,
[bfail] [int] NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
INSERT #org_dep1 ([ID], [sCode], [sName], [idEmployee], [sMemo], [Created], [CreatedBy], [Updated], [UpdatedBy], [pathid], [idparent], [bfail]) VALUES (N'40C6011581E24F91A3B26310EA867BEB', N'subcomp19', N'重庆**', N'subcomp9', N'重庆**有限公司', NULL, NULL, NULL, NULL, N'9', N'subcomp9', 0)
INSERT #org_dep1 ([ID], [sCode], [sName], [idEmployee], [sMemo], [Created], [CreatedBy], [Updated], [UpdatedBy], [pathid], [idparent], [bfail]) VALUES (N'6F6E55C2B2C84240B482D58E0B680170', N'subcomp9', N'通关事业部', N'subcomp1', N'通关事业部', NULL, NULL, NULL, NULL, N'1', N'subcomp1', 0)
--DELETE FROM #org_dep1
--SELECT * FROM #org_dep1
--update #org_dep1 set #org_dep1.[idparent]=a.id from #org_dep1 AS a where idparent=a.sCode
SELECT * FROM #org_dep1,#org_dep1 AS A where #org_dep1.idparent=a.sCode--查询 idparent=a.sCode 只有一条数据
update c
set c.idparent = p.id
from #org_dep1 c
LEFT JOIN #org_dep1 p
ON c.idparent = p.sCode
为什么 update 后 第二条数据的idparent 会变?
/*
ID sCode sName idEmployee sMemo Created CreatedBy Updated UpdatedBy pathid idparent bfail
40C6011581E24F91A3B26310EA867BEB subcomp19 重庆** subcomp9 重庆**有限公司 NULL NULL NULL NULL 9 6F6E55C2B2C84240B482D58E0B680170 0
6F6E55C2B2C84240B482D58E0B680170 subcomp9 通关事业部 subcomp1 通关事业部 NULL NULL NULL NULL 1 NULL 0
*/
update c
set c.idparent = p.id
from org_dep1 c
LEFT JOIN org_dep1 p
ON c.idparent = p.sCode