如何比较两个表,如果值匹配,则使用第三个表中的值更新其中一个表?

2guxujil  于 2022-10-22  发布在  其他
关注(0)|答案(2)|浏览(162)

我有3张table,MAIN_TABLESUB_TABLEID_TABLE
我需要将MAIN_TABLE中的CODESUB_TABLE的m1e5o1p进行比较,如果它们匹配,则搜索ID_TABLE上的m1p7o1p,并用MAIN_TABLE更新ID内的m1o1p。
在下面的示例中,查询应该使用ID = 2071更新MAIN_TABLE
MAIN_TABLE
|代码| ID|
| ------------ | ------------ |
| 0290380007800 | 994526 |
SUB_TABLE
|代码|SUB_ID|
| ------------ | ------------ |
| 029038078 | 106603 |
ID_TABLE
|ID |子ID|
| ------------ | ------------ |
| 2071 | 106603 |
要将MAIN_TABLE的代码与SUB_TABLE中的代码匹配,我需要如下选择:

SELECT 
    SUBSTRING(CODE, 1, 6) + SUBSTRING(CODE, 9, 3) 
FROM 
    MAIN_TABLE

我如何才能做到这一点?
下面是每个表中包含更多数据的dbfiddle:https://dbfiddle.uk/6H_mnPDR?hide=28

vsdwdz23

vsdwdz231#

只需将表作为更新语句的一部分连接在一起。请注意,这会给你重复的ID,但是你已经有了重复的ID了,所以我猜这是意料之中的(虽然不寻常)。

UPDATE mt SET
    id = it.id
FROM MAIN_TABLE mt
INNER JOIN SUB_TABLE st ON st.code = SUBSTRING(mt.CODE, 1, 6) + SUBSTRING(mt.CODE, 9, 3) 
INNER JOIN ID_TABLE it ON it.SUB_ID = st.SUB_ID;
68de4m5k

68de4m5k2#

使用子查询可以解决问题。您可以尝试以下代码:

update MAIN_TABLE set
    MAIN_TABLE.ID = Final.SUB_ID
from (
    select distinct ID_TABLE.SUB_ID, MAIN_TABLE.codeNew, MAIN_TABLE.Code, SUB_TABLE.Code  
    from (
        select SUBSTRING(CODE, 1, 6) + SUBSTRING(CODE, 9, 3) as CodeNew, Code
        from MAIN_TABLE
    ) as MAIN_TABLE
    inner join SUB_TABLE on MAIN_TABLE.CodeNew = SUB_TABLE.Code
    inner join ID_TABLE on ID_TABLE.SUB_ID = SUB_TABLE.SUB_ID
) Final
where MAIN_TABLE.code = Final.Code

相关问题