2017-06-28 8 views
-2
merge into bonuses 
using(select * from bonuses)s ON s.employee_id = '111' 
WHEN MATCHED THEN update set bonus='555' 
WHEN NOT MATCHED THEN insert insert into BONUSES (employee_id) values(115) 

Table`s existiert einfügen Abfragen sindeinfügen oder aktualisieren, wenn bereits

insert into BONUSES (employee_id) values(111) 
insert into BONUSES (employee_id) values(112) 
insert into BONUSES (employee_id) values(113) 
insert into BONUSES (employee_id) values(114) 
insert into BONUSES (employee_id) values(115) 

Wenn 111 employee_id = existiert bereits sollte es sonst aktualisieren einfügen sollte. Bitte helfen, wenn jemand wissen

+1

Was ist das Geschäft hier Logik? Es macht keinen Sinn. – APC

+0

Wenn also für Mitarbeiter 111 kein BONUS-Datensatz existiert, fügen Sie einen Bonus-Datensatz für Mitarbeiter 115 hinzu. Seltsam. Wenn das stimmt, hast du ein interessantes Bonusregime in der Firma. – BriteSponge

+0

dies ist nur ein Beispiel, wenn diese Zusammenführungsabfrage funktioniert, werde ich für andere Arbeiten implementieren. Bitte helfen Sie mir technisch suchen Sie hier nicht nach Geschäftslogik. – Mano

Antwort

0

Ich denke, was, nachdem Sie sind so etwas wie:

merge into bonuses tgt 
using (select '111' employee_id, '555' bonus from dual) src 
    on (tgt.employee_id = src.employee_id) 
WHEN MATCHED THEN 
    update set tgt.bonus = src.bonus 
WHEN NOT MATCHED THEN 
    insert (tgt.employee_id, tgt.bonus) 
    values (src.employee_id, src.bonus); 

Als Nebenwirkung, warum sind Sie Zeichenfolgen in Spalten eingefügt, die in der Regel einen Datentyp von irgendeiner Form von Nummer? Haben diese Spalten tatsächlich String-Datentypen (z. B. VARCHAR2, CHAR usw.)?

+0

Merge Abfrage für Bonus-Tabelle, die Daten einfügen, wenn Employee_id nicht existiert sonst Update vorhandenen Bonus .. Jedes Beispiel dafür wird hilfreich sein, Daten doesn't keine – Mano

+0

Das ist, was ich Ihnen zur Verfügung gestellt habe. – Boneist

0

Etwas wie:

MERGE INTO bonuses dst 
USING (SELECT '111' AS employee_id, '555' AS bonus FROM DUAL) src 
ON (dst.employee_id = src.employee_id) 
WHEN MATCHED THEN 
    UPDATE SET bonus = src.bonus 
WHEN NOT MATCHED THEN 
    INSERT (employee_id, bonus) 
    VALUES (src.employee_id, src.bonus); 
+0

Merge Abfrage für Bonus-Tabelle, die Daten einfügen, wenn Employee_id nicht existiert sonst Update bestehenden Bonus .. – Mano

1

Ihre Syntax ist schief. Es sollte sein:

merge into bonuses b 
using(select * from bonuses) s 
ON (s.employee_id = 115) 
WHEN MATCHED THEN update set bonus='555' 
WHEN NOT MATCHED THEN insert(employee_id) values(115) 
/

Es ist jedoch nicht sinnvoll ist, in der using Klausel, um die Zieltabelle zu haben. Es produziert nicht die Ergebnisse, die Sie denken, es geht ...

SQL> select * from bonuses; 

EMPLOYEE_ID  BONUS 
----------- ---------- 
     111 
     112 
     113 
     114 
     115 

5 rows selected. 

SQL> merge into bonuses b 
    2 using(select * from bonuses) s 
    3 ON (s.employee_id = 115) 
    4 WHEN MATCHED THEN update set bonus='555' 
    5 WHEN NOT MATCHED THEN insert (employee_id) values(115) 
    6/ 

9 rows merged. 

SQL> select * from bonuses; 

EMPLOYEE_ID  BONUS 
----------- ---------- 
     111  555 
     112  555 
     113  555 
     114  555 
     115  555 
     115 
     115 
     115 
     115 

9 rows selected. 

SQL> 

Vielleicht wie etwas das würde Ihnen passen?

merge into bonuses b 
using(select * from employees) e 
    ON (b.employee_id = e.employee_id) 
WHEN MATCHED THEN 
    update set bonus= 555 
WHEN NOT MATCHED THEN 
    insert (employee_id) values (e.id) 

Wenn Sie keine Quelle der Mitarbeiter-IDs verschieden von der BONI Tabelle haben Sie die DUAL-Tabelle zu fälschen sie verwenden können:

SQL> merge into bonuses b 
    2 using(select 115 as employee_id, 555 as bonus from dual union all 
    3   select 116 as employee_id, 555 as bonus from dual) e 
    4  ON (b.employee_id = e.employee_id) 
    5 WHEN MATCHED THEN 
    6  update set bonus= e.bonus 
    7 WHEN NOT MATCHED THEN 
    8  insert (employee_id) values (e.employee_id) 
    9/

2 rows merged. 

SQL> select * from bonuses; 

EMPLOYEE_ID  BONUS 
----------- ---------- 
     111 
     112 
     113 
     114 
     115  555 
     116 

6 rows selected. 

SQL> 
+0

Merge-Abfrage für Bonus-Tabelle, die Daten einfügen, wenn Employee_id nicht existiert sonst Update bestehenden Bonus .. Jedes Beispiel dafür wird hilfreich sein, Daten doesn 't Angelegenheit – Mano

Verwandte Themen