[英]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.