如果SQL Server中的表2中的子\u ID匹配,则查询以更新表的相应父\u ID

如果SQL Server中的表2中的子\u ID匹配,则查询以更新表的相应父\u ID,sql,sql-server,Sql,Sql Server,我有一张叫做level_1和level_2的桌子 Create table level_1 ( parent_id int, child_id int, status varchar(10) ); Create table level_2 ( child_id int ); 1级表格: insert into level_1 values (11, 12, null), (12, 13, null), (13, 15, null),

我有一张叫做level_1和level_2的桌子

Create table level_1
(
     parent_id int,  
     child_id int, 
     status varchar(10)
);

Create table level_2
(
     child_id int
);
1级表格:

insert into level_1 
values (11, 12, null), (12, 13, null), (13, 15, null),
       (17, 19, null), (22, 34, null), (23, 22, null),
       (29, 40, null), (40, 55, null), (32, 22, null),
       (19, 22, null), (55, 60, null)
二级表:

insert into level_2 
values(15), (22), (34), (60)

select * from level_1;

 PARENT_ID   CHILD_ID STATUS
---------- ---------- ----------
        11         12
        12         13
        13         15
        17         19
        22         32
        19         22
        19         40
        40         19
        32         22
        19         22
        55         60
选择11行

SQL> select * from level_2;

  CHILD_ID
----------
        15
        19
        22
        60
在这里,当level_1表中的level_2.child_id=level_1.child_id时,我应该将状态更新为“Y”,并且应该将相应的parent_id值更新为“Y”,如下所示

    -----------+----------+--------
    parent_id    child_id   status
    -----------+----------+--------
    11             12          Y
    12             13          Y
    13             15          Y
    23             22          Y
    17             19          Y
    19             22          Y
    22             34          Y
    29             40          Y
    40             55          Y
    55             60          Y
    -----------+----------+--------

如果我理解你的问题,这应该是答案:

UPDATE l1
SET status = 'Y'
FROM level_1 l1
    INNER JOIN level_2 l2 ON l1.child_id = l2.child_id;

然而,数据库的设计似乎有问题。

我不明白。您是否希望将所有的
状态设置为
'Y'
?您正在寻找递归查询吗?您的解释和您的结果不太匹配。是的,正在查找递归查询以更新状态列,如果level_2.child_id=level_1.child_id位于level_1表中,并且应该将level_1表中具有父_id的对应ChildID更新为“Y”,如图所示……我不明白。为什么这里需要递归?对我来说,这听起来像是一个内在的连接,或者可能我遗漏了什么。我的问题:-工作不正常。。选择a.parent\u id、a.child\u id、b.child\u id,当a.child\u id=b.child\u id时选择case,当a.child\u id=a.parent\u id时选择'Y',然后从级别\u 1 a中选择'Y'结束“状态更新”,级别2 b,其中a.child\u id=b.child\u id当child\u id与parent\u id匹配时,应进行更新,并且应使用zigzag方式的child\u id记录更新相应的parent\u id记录……在oracle分层函数中,我们可以使用……在mssql中,新学员无法找到我必须使用的函数