sql >> Databáze >  >> RDS >> Oracle

Mohl by někdo vysvětlit, co příkaz MERGE skutečně dělá v Oracle?

jaký druh spojení se provádí? Myslím, že je to úplné vnější spojení, je to tak?

Ne, je to normální vnější spojení. Dotaz potřebuje vědět, kdy jsou v cílové tabulce řádky, které jsou také ve zdrojové tabulce, a kdy jsou ve zdrojové tabulce záznamy, které nejsou v cílové tabulce. Protože dotaz nemusí odpovídat na řádky, které jsou v cílové tabulce, ale nejsou ve zdrojové tabulce, nepotřebuje vnější spojení, aby šlo oběma způsoby.

Vnější spojení se však neprovede, pokud neexistuje not matched klauzule (která je naprosto platná). Optimalizátor je dostatečně chytrý, aby věděl, že v takovém případě stačí vnitřní spojení.

ohledně části WHEN MATCHED:co se stane, když se řádek z t shoduje s několika řádky z s?

Pokud existuje více shod, aktualizace se provede pro každou shodu. To znamená, že aktualizace, která přijde jako poslední, bude ta zapsaná v potvrzení. Neexistuje způsob, jak diktovat objednávku, takže v tomto případě je zdroj aktualizace fakticky náhodný (ze sady shod).

Jak poznamenal @ Vincent Malgrat, toto bylo nesprávné. Zdá se, že Oracle vytvoří chybu „ORA-40926:nelze získat stabilní sadu řádků ve zdrojové tabulce“, pokud existuje více shod.

pokud jde o část KDY SE NEPŘIDÍ, Věřím, že to znamená „když řádek v s nemá žádnou shodu v t“. Mám pravdu?

To je správně.




  1. Import CSV do MySQL s jiným formátem data

  2. Jak uložit adresu kompatibilní s IPv6 v relační databázi

  3. Jak zabezpečit Galera Cluster – 8 tipů

  4. Jak používat pohledy v databázi MySQL