簡體   English   中英

SQL 查詢從表中獲取記錄的值並更新同一表中不同記錄的獲取值

[英]SQL query to get value from the table for a record and update the fetched value for different record in the same table

請幫助我查詢 SQL。 每天,我都會收到如下所示的數據 -

在此處輸入圖像描述

其中左欄是 Msisdn,右欄是參考 Msisdn。 對於每個msisdn,我必須在table_msisdn 中找到參考msisdn 的booking_id(column),然后必須在左列中更新msisdn 的booking_id。 我正在使用以下查詢。

select booking_id from table_msisdn where msisdn = '<any reference msidn>';

它將給我 booking_id 讓我們說 100。然后我必須使用下面的查詢為同一個表中的相應 msidn 更新這個值。

update table_msisdn set booking_id = '100' where msisdn = '<msisdn>';

table_msisdn 中的列 - msisdn(主鍵)、ndc_id、state_allocation、booking_id、subscription、locking_id、reservation_id。

對於許多記錄,我必須一一進行。 請幫助我處理 sql 查詢,以便我可以立即完成(使用 oracle DB)。 提前致謝。

WITH 子句在這里只是為了生成一些示例數據,因此,它不是答案的一部分。
示例數據(如果我從問題中得到它的話):

WITH
    tbl AS
        (
            Select  4916094659983 "ID", 100 "BOOKING_ID" From Dual Union All
            Select  491763998189  "ID", 200 "BOOKING_ID" From Dual Union All
            Select  491728303243  "ID", 300 "BOOKING_ID" From Dual Union All
            Select  491728303239  "ID", 400 "BOOKING_ID" From Dual Union All
            Select  4915904335947 "ID", 500 "BOOKING_ID" From Dual Union All
            Select  495904335950  "ID", 600 "BOOKING_ID" From Dual Union All
            Select  4915904875000 "ID", 700 "BOOKING_ID" From Dual 
        ),
    ref_tbl AS
        (
            Select 4916094659983 "ID", 4915904335947 "REF_ID" From Dual Union All
            Select 491763998189  "ID", 495904335950  "REF_ID" From Dual Union All
            Select 491728303243  "ID", 4915904875000 "REF_ID" From Dual Union All
            Select 491728303239  "ID", 4915904875000 "REF_ID" From Dual 
        )

在更新語句中有一個連接 ID、REF_ID 和 BOOKING_ID 的子查詢。 將這些數據放在一起解決了設置新值和過濾要更新的行的問題。
帶有數據的子查詢...

SELECT DISTINCT t.ID, 
  (SELECT BOOKING_ID FROM a_tbl WHERE ID = rt.REF_ID) "BOOKING_ID",
  rt.REF_ID
FROM a_tbl t
INNER JOIN a_ref_tbl rt ON(rt.ID = t.ID)
--  
--  R e s u l t :
--  
--             ID   BOOKING_ID         REF_ID
--  -------------   ----------  -------------
--  4916094659983          500  4915904335947
--   491728303239          700  4915904875000
--   491763998189          600   495904335950
--   491728303243          700  4915904875000

更新....

UPDATE a_tbl t
SET t.BOOKING_ID = Nvl  ( 
                            (  
                                SELECT DISTINCT tbl_lnk.BOOKING_ID 
                                FROM 
                                (
                                    SELECT DISTINCT t.ID, 
                                            (SELECT BOOKING_ID FROM a_tbl WHERE ID = rt.REF_ID) "BOOKING_ID",
                                            rt.REF_ID
                                    FROM a_tbl t
                                    INNER JOIN a_ref_tbl rt ON(rt.ID = t.ID)
                                ) tbl_lnk
                                WHERE tbl_lnk.ID = t.ID
                            )
          , t.BOOKING_ID)
WHERE
    t.ID = Nvl  ( 
                        (  
                            SELECT DISTINCT ID 
                            FROM 
                            (
                                SELECT DISTINCT t.ID, 
                                        (SELECT BOOKING_ID FROM a_tbl WHERE ID = rt.REF_ID) "BOOKING_ID",
                                        rt.REF_ID
                                FROM a_tbl t
                                INNER JOIN a_ref_tbl rt ON(rt.ID = t.ID)
                            ) tbl_lnk
                            WHERE ID = t.ID
                        )
             , 0)
--  
--  4 rows updated.
--  

而結果...

SELECT * FROM A_TBL
--  
--  R e s u l t :
--
--             ID   BOOKING_ID
--  -------------   ---------
--  4916094659983         500
--   491763998189         600
--   491728303243         700
--   491728303239         700
--  4915904335947         500
--   495904335950         600
--  4915904875000         700

希望我正確理解了這個問題。 問候...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM