sql >> Database teknologi >  >> RDS >> Oracle

skabe orakelvisning baseret på sammenligning af data mellem to databasetabeller

Du skal bruge LEAST() funktion sammen med 3 underforespørgsler kombineret med UNION klausuler. To af underforespørgslerne skal indeholde FULL JOIN blandt borde :

CREATE VIEW V_MEMBER_FUND AS    
SELECT i.fund_isin,
       i.member_descr,
       LEAST(i.member_ratio, t.member_ratio) AS member_ratio,
       i.allocationassettype
  FROM IS_ID i
  JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
   AND t.member_descr = i.member_descr
 WHERE i.member_descr = 'O'
UNION
SELECT LEAST(NVL(i.fund_isin,t.fund_isin),NVL(t.fund_isin,i.fund_isin)) AS fund_isin,
       LEAST(NVL(i.member_descr,t.member_descr),NVL(t.member_descr,i.member_descr)) AS member_descr,
       LEAST(NVL(i.member_ratio,t.member_ratio),NVL(t.member_ratio,i.member_ratio)) AS member_ratio,
       LEAST(NVL(i.allocationassettype,t.allocationassettype),NVL(t.allocationassettype,i.allocationassettype)) AS allocationassettype
  FROM IS_ID i
  FULL JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
 WHERE (i.member_descr = 'O' OR t.member_descr = 'O' )
   AND ( t.fund_isin IS NULL OR i.fund_isin IS NULL )
UNION
SELECT t.fund_isin,
       t.member_descr,
       t.member_ratio,
       t.allocationassettype
  FROM IS_ID i
 RIGHT JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
   AND t.member_descr = i.member_descr
 WHERE (NVL(i.member_descr,'XYZ') != 'O' OR NVL(t.member_descr,'XYZ') != 'O' )
   AND t.fund_isin IS NOT NULL  

til den første case :Behøver kun at returnere minimumsværdien i form af member_ratio med i.member_descr = 'O' matcher.

i anden case :Tovejs(FULL JOIN ) logik får besked på at være nødvendig

for den tredje kasus :En ydre sammenføjning i forhold til positionen IS_ID_TST tabel (i det aktuelle tilfælde er det RIGHT JOIN ) er nødvendig sammen med ikke-ækvivalente værdier for member_desct til værdien 'O' (selv NULL-værdier bør alimineres, og NVL() funktion er tilføjet til dette formål )

Og alle de underforespørgsler, der er angivet i de tre tilfælde, skal kombineres med UNION for at tilvejebringe rækkevis kombination, herunder eliminering af de gentagne rækker.

Demo



  1. Flyt tabel fra en database til en anden i MySQL

  2. SQLAlchemy with_for_update rækkelåsning virker ikke?

  3. SQL*Plus script udført to gange

  4. Problemer med json.GetJSONArray(?) i Android