สิทธิ์ภาษา 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 คือกลับมา

หลักฐาน:

ตอนที่ฉันวิ่งอยู่เหนือกับการค้นหาฉันได้เรื่องผล:

เป็ บี c
1 43 65
2 66 333

ตอนที่ฉันเลือกข้อมูลจาก tableY ฉัไปนี้:

เป็ บี c
1 54 65
2 88 567

tableY ข้อมูลที่ถูกต้องข้อมูลดังนั้นฉันต้องการจะปรับปรุงทั้งหมด tuples ที่กลับมาจากคนแรกกับการค้นหา(คนหนึ่งลบเงื่อนไขว่า)กับข้อมูลจาก tableY.

ให้ได้ผลลัพธ์ตามที่คาดหวังหลังจากปรับปรุงข้อตกลงนั้ตอนที่ฉันเลือกข้อมูลจาก tableX ควรจะเป็น:

เป็ บี c
1 54 65
2 88 567

มันคืออะไรมากที่สุด eficcient ทางที่จะทำอย่างนี้ปรับปรุงข้อตกลงนั้?

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

คำตอบที่ดีที่สุด

1

บสิทธิ์ฉันเจอคผนวกรวมรูปแบบการสั่งงานมากกว่าใช้ได้มากกว่าปรับปรุงรูปแบบการสั่งงาน...

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.บี=น่อยบีและ x.c=น่อยc รวมอยู่ในการต่อรอ?
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<>ไบต์หรือ xc<>yc:

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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่