Oracle SQL - अद्यतन स्तंभ के डेटा का उपयोग कर शून्य से ऑपरेटर

0

सवाल

मैं इस sql क्वेरी

(select x.a, x.b, x.c, x.d
from tableX x
where x.a IS NOT NULL
minus 
select y.a, y.b, y.c, y.d
from tableY y);

ऊपर क्वेरी मुझे सभी tableX डेटा, से अलग है कि tableY. कई tuples लौट रहे हैं

सबूत:

जब मैं ऊपर चला क्वेरी मैं इस परिणाम:

एक बी सी
1 43 65
2 66 333

जब मैं डेटा का चयन से tableY मैं इस मिल:

एक बी सी
1 54 65
2 88 567

tableY डेटा सही डेटा है, तो मैं करना चाहते हैं अद्यतन करने के लिए सभी tuples वापस आ रहे हैं कि पहले से क्वेरी(एक शून्य से खंड) से डेटा के साथ tableY.

की उम्मीद है और परिणाम के रूप में, अद्यतन करने के बाद, खंड, जब मैं डेटा का चयन से tableX होना चाहिए:

एक बी सी
1 54 65
2 88 567

क्या है सबसे eficcient तरीका यह करने के लिए अद्यतन खंड?

oracle plsql sql
2021-11-23 19:18:31
2

सबसे अच्छा जवाब

1

Oracle पर मैं खोजने के विलय वाक्यविन्यास बहुत अधिक प्रयोग करने योग्य की तुलना में अद्यतन वाक्य रचना...

MERGE INTO
  tablex   x
USING
  tabley   y
    ON (y.a = x.a)
WHEN MATCHED THEN UPDATE
  SET
    x.b = y.b,
    x.c = y.c
  WHERE
    LNNVL(x.b = y.b)
    OR
    LNNVL(x.c = y.c)

संपादित करें: जोड़ा गया जहाँ खंड से बचने के लिए निरर्थक अद्यतन, निम्न टिप्पणी के नीचे.

2021-11-23 20:50:15

कर रहे हैं, जहां पंक्तियों x.b = y.b और x.c = y.सी में शामिल किए गए लेन-देन?
jarlh

@jarlh गया, जहां खंड के लिए WHEN MATCHED से बचने के लिए है कि परिदृश्य.
MatBailie

इस समाधान का हल मेरा सवाल है, धन्यवाद
jct
0
update tablex
set (b, c) = (select b, c from tabley where tabley.a = tablex.a)
where exists (select 1 from tabley where tabley.a = tablex.a);

रखने के लिए लेन-देन आकार के नीचे जोड़ने के लिए, xb <> yb या xc <> वाईसी:

update tablex
set (b, c) = (select b, c from tabley where tabley.a = tablex.a)
where exists (select 1 from tabley
              where tabley.a = tablex.a
                and (LNNVL(tabley.b = tablex.b) or LNNVL(tabley.c = tablex.c)));
2021-11-23 20:39:46

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में