Névjegyzék

Rekordok törlése az SQL adatbázisból. Oracle - Eltávolítás - Delete Duplicates SQL Partition Szekció neve

Records eltávolítása

A rekordok eltávolításához a Táblázatból a Törlés operátort alkalmazzák:

Törölje a Nametablitsa-tól, ahol az állapot;

Ez az operátor eltávolítja a rekordot a megadott táblázatból (és nem külön oszlopértékek), amelyek megfelelnek a megadott állapotnak. A feltétel logikai kifejezés, amelynek különböző formatervezése a korábbi laboratóriumi osztályokban vett részt.

A következő lekérdezés törli a rekordot az ügyféltábláról, amelyben az LNAME oszlop értéke "Ivanov":

Törölje az ügyféltől.

Ahol lname \u003d "ivanov"

Ha a táblázat több ügyféllel kapcsolatos információkat tartalmaz az Ivanov vezetéknévvel, akkor mindegyikük eltávolításra kerül.

Ami az utasításban egy adatminta allása lehet (válassza ki a kijelentést). A Delete Operátor allokálása ugyanúgy működik, mint a kiválasztott utasításban. A következő kérés töröl minden ügyfél számára a város Moszkva, míg az egyedülálló város küld vissza a segédlekérdezés.

Törölje az ügyféltől.

Ahol az idcity (válasszon idcitást a városban, ahol cityname \u003d "moszkva")

-SQL kiterjeszti a szabványos SQL, amely lehetővé teszi, hogy használja a DELETE utasítás egy másikat egy. Ez a kiterjesztés, amelyben a kapcsolatot beállították, a befektetett lekérdezés helyett a kívánt lekérdezés helyett használható a cserélhető vonalak meghatározására. Ez lehetővé teszi, hogy megadja az adatokat a másodikból, és törölje a megfelelő vonalakat az asztalról az első ajánlatban. Különösen az előző kérés a következőképpen írható át.

Törölje az ügyféltől.

Az ügyfél k belső csatlakozásához

A művelet után feljegyzések a tábla veszélyes abban az értelemben, amely kapcsolatban van a .Maradandó adatvesztés esetén szemantikai (de nem szintaktikai) hibák szövegében SQL kifejezés. A bajok elkerülése érdekében ajánlatos először végrehajtani a megfelelő kiválasztási kérelmet, hogy nézze meg, hogy mely rekordok törlődnek. Például a korábban figyelembe vett elvégzés előtt a törlési kérelem nem akadályozza meg a megfelelő kiválasztási kérelmet.

Válasszon *

Az ügyfél k belső csatlakozásához

CITY C ON K.IDCITY \u003d C.IDCITY ÉS C.CITYNAME \u003d "Moszkva"

Az összes rekord törléséhez az asztalról elegendő a törlési nyilatkozatot a kulcsszó nélkül, ahol. Ugyanakkor a táblázat az összes olyan oszlopban marad, és készen áll az új rekordok beillesztésére. Például a következő kérés törli az összes áru rekordjait.

Törlés a termékről

Feladat független munkához: Az SQL nyelvi kérelem megfogalmazása minden olyan megrendelés eltávolítására, amely nincs terméke (azaz minden üres megrendelés).



Az ismétlődő vonalak eltávolítása az Oracle-ban (14)

1. megoldás

Törlés az EMP-ből, ahol a ROWID NEM IN (válassza a Max (Rowid) EMP GROUP EMPNO-tól);

2. megoldás

Törölje az EMP-től, ahol ROWID ROWID RID, ROW_NUMBER EMPNO) RN az EMP-től), ahol RN\u003e 1);

3. megoldás

Irányítok valamit az Oracle-ben, és töltse ki az asztalt néhány példával, de az eljárásban véletlenül betöltöttem a rekordok ismétlését, így most nem tudok elsődleges kulcsot létrehozni néhány oszlop segítségével.

Hogyan törölje az összes ismétlődő vonalat, és hagyja csak az egyiket?

A jobb teljesítmény érdekében ezt írtam:
(lásd végrehajtási terv)

Törlés az Ön_Table-ből, ahol Rowid in (válassza a T1.ROWID-t a SOUD_TABLE T1 baloldali csatlakozásból (válassza a Min (ROWID), mint Rowid, oszlop1, oszlop, oszlop, oszlop a Your_Table Group 3 oszlop, oszlop2, oszlop3) CO1 be (T1.ROWID \u003d CO1. Rowid), ahol a CO1.ROWID NULL);

Ellenőrizze a szkripteket -

Táblázási teszt létrehozása (ID INT, SAL INT);

Teszt értékekbe (1,100); Teszt értékekbe (1,100); Teszt értékekbe (2200); Teszt értékekbe (2200); Teszt értékekbe (3300); Teszt értékekbe (3300); ELKÖVETNI;

Válasszon * a tesztből;

Itt lesz 6 rekord.
4. A lekérdezés alatt -

Törölje a tesztet, ahol a ROWID IN (SELECT ROWID (SELECT ROWID ROW_NUMBER () OVER (PARTITION by ID Rendelés: Sal) Dup a tesztből), ahol Dup\u003e 1)

  1. válasszon * a tesztből;

Látni fogja, hogy a rekordok duplikátumát eltávolították.
Remélem, ez megoldja a kérését. Köszönöm :)

A Duplikátumok kiválasztásához csak a kérésformátum lehet:

Válasszuk ki a csoportfunkciót (oszlop1), csoportfunkció (oszlop2), ..., COUNT (oszlop1), oszlop1, oszlop1, oszlop 2. oszlop (over_table csoport) 1. oszlop, oszlop2, oszlop3 ...

Így a helyes kérés egy másik javaslatról:

Törlés a Táblám A ahol A.ROWID\u003e Bármelyik (válassza a B.ROWID B Táblámot B, ahol A.fieldName \u003d B.fieldName és A.fieldName2 \u003d B.fieldName2 és .... hogy azonosítsa a duplikált sorokat .. ..)

Ez a lekérdezés megmenti a legrégebbi rekordot az adatbázisban az adott pontban kiválasztott kritériumokhoz.

Oracle Certified Associate (2008)

Nem láttam az általános asztali kifejezéseket és ablakfunkciókat használó válaszokat. Ez az, ami megkönnyíti számomra dolgozni.

Törölje a teadable-tól, ahol a ROWID (Duplicates, mint (válassza ki a ROWID RID, ROW_NUMBER () felett (Partition by first_name, last_name, birth_date), mint RN összeg (1) át (Partion by First_Name, Last_Name, Birth_Date megrendelés a ROWID sorok között a korlátozatlanok között És korlátozott követve), mint a thade-tól származó CNT, ahol a load_date null) válassza ki a RID-t a Duplikátumoktól, ahol RN\u003e 1);

Mit kell mondani:

1) Ellenőrizzük, hogy csak a duplikált mezőket ellenőrizzük a szakaszban.

2) Ha van okod, hogy válasszon egy másolatot mások felett, használhatja a megrendelést, hogy ez a sor row_number () \u003d 1

3) Megváltoztathatja a megmentett szám másolatát azáltal, hogy megváltoztatja a végleges ajánlatot, ahol az "ahol RN\u003e N" n\u003e \u003d 1-vel (azt hittem, hogy az n \u003d 0 törli az összes sorszámot, de egyszerűen törölje az összes vonalat ),

4) Hozzáadott mező szekció összege, CTE lekérdezés, amely feleségül veszi a csoportban lévő összes fow vonalszámot. Ezért, hogy válasszon sorokat a duplikátumokkal, beleértve az első elemet is, használja a "Hol CNT\u003e 1" használatát.

1. kereslet

Törlés az EMP-ből, ahol a ROWID NEM IN (válassza a Max (Rowid) EMP GROUP EMPNO-tól);

2. Slotion

Törölje az EMP-től, ahol ROWID ROWID RID, ROW_NUMBER EMPNO) RN az EMP-től), ahol RN\u003e 1);

3.Szolutionálás

Törölje az EMP E1-től, ahol a ROWID NEM IN (válassza a Max (Rowid) EMP E2-től, ahol E1.empno \u003d E2.empno);

4. kereslet

Törlés az EMP-ből, ahol ROWID ROWID RID, DENST_RANK () át () az EMPNO SORSID által az EMPNO megrendeléssel) RN-től az EMP-től), ahol RN\u003e 1);

Az eljárás létrehozása vagy cseréje DELETE_DUPLICHATE_ENQ A kurzor C1 kiválasztja a * vizsgálatot; Kezdje a Z-t a C1 hurok törlésére, ahol enquiry.enquiryno \u003d Z.Enquiryno és Rowid\u003e Bármelyik (válassza ki a Rowid-t, ahol enquiry.enquiryno \u003d z.enquiryno); Végharc; Végső delete_duplike_enq;

Táblázat létrehozása ABCD (ID szám (10), Név Varchar2 (20)) Helyezzen be ABCD értékekbe (1, "ABC") Insert az ABCD értékekbe (2, "PQR") Insert be az ABCD értékekbe (3, "XYZ") Az ABCD értékekbe (1, "ABC") betétbe helyezzen be ABCD értékeket (2, "PQR") betét az ABCD értékekbe (3, "XYZ") Válasszon * az ABCD ID-nél 1 ABC 2 pqr 3 xyz 1 ABC 2 pqr 3 xyz Törölje a duplikált rekordot, de távolítsa el a táblázatos rekordot az ABCD A-ről, ahol a ROWID\u003e (válassza a Min (Rowid) abcd b-t, ahol B.ID \u003d A.ID); Futtassa a fenti lekérdezés 3 Sorok törlése * ABCD ID NAME 1 ABC 2 PQR 3 XYZ



a ROWID ORACLE (14) eltávolítása

Irányítok valamit az Oracle-ben, és töltse ki az asztalt néhány példával, de az eljárásban véletlenül betöltöttem a rekordok ismétlését, így most nem tudok elsődleges kulcsot létrehozni néhány oszlop segítségével.

Hogyan törölje az összes ismétlődő vonalat, és hagyja csak az egyiket?

1. megoldás

Törlés az EMP-ből, ahol a ROWID NEM IN (válassza a Max (Rowid) EMP GROUP EMPNO-tól);

2. megoldás

Törölje az EMP-től, ahol ROWID ROWID RID, ROW_NUMBER EMPNO) RN az EMP-től), ahol RN\u003e 1);

3. megoldás

A jobb teljesítmény érdekében ezt írtam:
(lásd végrehajtási terv)

Törlés az Ön_Table-ből, ahol Rowid in (válassza a T1.ROWID-t a SOUD_TABLE T1 baloldali csatlakozásból (válassza a Min (ROWID), mint Rowid, oszlop1, oszlop, oszlop, oszlop a Your_Table Group 3 oszlop, oszlop2, oszlop3) CO1 be (T1.ROWID \u003d CO1. Rowid), ahol a CO1.ROWID NULL);

Ellenőrizze a szkripteket -

Táblázási teszt létrehozása (ID INT, SAL INT);

Teszt értékekbe (1,100); Teszt értékekbe (1,100); Teszt értékekbe (2200); Teszt értékekbe (2200); Teszt értékekbe (3300); Teszt értékekbe (3300); ELKÖVETNI;

Válasszon * a tesztből;

Itt lesz 6 rekord.
4. A lekérdezés alatt -

Törölje a tesztet, ahol a ROWID IN (SELECT ROWID (SELECT ROWID ROW_NUMBER () OVER (PARTITION by ID Rendelés: Sal) Dup a tesztből), ahol Dup\u003e 1)

  1. válasszon * a tesztből;

Látni fogja, hogy a rekordok duplikátumát eltávolították.
Remélem, ez megoldja a kérését. Köszönöm :)

A Duplikátumok kiválasztásához csak a kérésformátum lehet:

Válasszuk ki a csoportfunkciót (oszlop1), csoportfunkció (oszlop2), ..., COUNT (oszlop1), oszlop1, oszlop1, oszlop 2. oszlop (over_table csoport) 1. oszlop, oszlop2, oszlop3 ...

Így a helyes kérés egy másik javaslatról:

Törlés a Táblám A ahol A.ROWID\u003e Bármelyik (válassza a B.ROWID B Táblámot B, ahol A.fieldName \u003d B.fieldName és A.fieldName2 \u003d B.fieldName2 és .... hogy azonosítsa a duplikált sorokat .. ..)

Ez a lekérdezés megmenti a legrégebbi rekordot az adatbázisban az adott pontban kiválasztott kritériumokhoz.

Oracle Certified Associate (2008)

Nem láttam az általános asztali kifejezéseket és ablakfunkciókat használó válaszokat. Ez az, ami megkönnyíti számomra dolgozni.

Törölje a teadable-tól, ahol a ROWID (Duplicates, mint (válassza ki a ROWID RID, ROW_NUMBER () felett (Partition by first_name, last_name, birth_date), mint RN összeg (1) át (Partion by First_Name, Last_Name, Birth_Date megrendelés a ROWID sorok között a korlátozatlanok között És korlátozott követve), mint a thade-tól származó CNT, ahol a load_date null) válassza ki a RID-t a Duplikátumoktól, ahol RN\u003e 1);

Mit kell mondani:

1) Ellenőrizzük, hogy csak a duplikált mezőket ellenőrizzük a szakaszban.

2) Ha van okod, hogy válasszon egy másolatot mások felett, használhatja a megrendelést, hogy ez a sor row_number () \u003d 1

3) Megváltoztathatja a megmentett szám másolatát azáltal, hogy megváltoztatja a végleges ajánlatot, ahol az "ahol RN\u003e N" n\u003e \u003d 1-vel (azt hittem, hogy az n \u003d 0 törli az összes sorszámot, de egyszerűen törölje az összes vonalat ),

4) Hozzáadott mező szekció összege, CTE lekérdezés, amely feleségül veszi a csoportban lévő összes fow vonalszámot. Ezért, hogy válasszon sorokat a duplikátumokkal, beleértve az első elemet is, használja a "Hol CNT\u003e 1" használatát.

1. kereslet

Törlés az EMP-ből, ahol a ROWID NEM IN (válassza a Max (Rowid) EMP GROUP EMPNO-tól);

2. Slotion

Törölje az EMP-től, ahol ROWID ROWID RID, ROW_NUMBER EMPNO) RN az EMP-től), ahol RN\u003e 1);

3.Szolutionálás

Törölje az EMP E1-től, ahol a ROWID NEM IN (válassza a Max (Rowid) EMP E2-től, ahol E1.empno \u003d E2.empno);

4. kereslet

Törlés az EMP-ből, ahol ROWID ROWID RID, DENST_RANK () át () az EMPNO SORSID által az EMPNO megrendeléssel) RN-től az EMP-től), ahol RN\u003e 1);

Az eljárás létrehozása vagy cseréje DELETE_DUPLICHATE_ENQ A kurzor C1 kiválasztja a * vizsgálatot; Kezdje a Z-t a C1 hurok törlésére, ahol enquiry.enquiryno \u003d Z.Enquiryno és Rowid\u003e Bármelyik (válassza ki a Rowid-t, ahol enquiry.enquiryno \u003d z.enquiryno); Végharc; Végső delete_duplike_enq;

Táblázat létrehozása ABCD (ID szám (10), Név Varchar2 (20)) Helyezzen be ABCD értékekbe (1, "ABC") Insert az ABCD értékekbe (2, "PQR") Insert be az ABCD értékekbe (3, "XYZ") Az ABCD értékekbe (1, "ABC") betétbe helyezzen be ABCD értékeket (2, "PQR") betét az ABCD értékekbe (3, "XYZ") Válasszon * az ABCD ID-nél 1 ABC 2 pqr 3 xyz 1 ABC 2 pqr 3 xyz Törölje a duplikált rekordot, de távolítsa el a táblázatos rekordot az ABCD A-ről, ahol a ROWID\u003e (válassza a Min (Rowid) abcd b-t, ahol B.ID \u003d A.ID); Futtassa a fenti lekérdezés 3 Sorok törlése * ABCD ID NAME 1 ABC 2 PQR 3 XYZ

Az Oracle lehetővé teszi, hogy törölje a vonalakat a táblázatok, nézetek, materializált ábrázolások, szubkókák és táblázatok, az alábbiak szerint.

(Nametables | csak (NAME_TABLE)) [álnév] [(partíció) részrész

(Név)))] (Subquery)])) Táblázat (expresszion_lit_collection) [(+)])

Változó [, ...]]

A paraméterek az alábbiakban láthatóak.

nAME_TABLE [PSEUDM]

Megadja a táblázatot, ábrázolást, materializált nézetet vagy megosztott táblázatot vagy nézetet, ahonnan a rekordok törlődnek. Ha szeretné, akkor a NAME_Table előtt adja meg a rendszert, vagy adja meg a táblázat kapcsolatának az adatbázishoz való kapcsolódását. Ellenkező esetben az Oracle rendszer az aktuális diagramot és a helyi adatbázis-kiszolgálót használja. Ha szeretné, hozzárendelhet néhány pszeudonim nevet. Az álnév akkor szükséges, ha a táblázat az attribútumra vagy az objektum típusára vonatkozik.

Partíció neve rész

A törlés művelet a megadott partícióra vonatkozik, és nem az egész asztalra. A partícionált táblázatból törlődik, nem szükséges meghatározni a partíció nevét, de ez sok esetben segít csökkenteni az ajánlat összetettségét.

Részrész)

Az eltávolítás a megadott alfejezetre vonatkozik, és nem az egész asztalra.

(Subquery)])

Jelzi, hogy az eltávolítási művelet célja beágyazott felirat, és nem táblázat, ábrázolás vagy más adatbázis objektum. A javaslat paraméterei a következők.

szubkolás

A SELECT utasítás meg van adva, amely rubkulás. Létrehozhat bármilyen szabványos szubkitást, de nem tartalmazhat megrendeléseket.

Csak olvasható.

Jelzi, hogy az aljzat nem frissíthető.

Ellenőrző opcióval

Az Oracle rendszer eldobja a távoli táblázat bármilyen módosítását, amely nem látható az eredményül kapott szubkután adatkészletben.

Korláta névnév

Az Oracle rendszer korlátozza a változtatásokat a korlátozás alapján a NAME_NAME névvel.

Táblázat (Rolling kifejezés) [(+)]

Az Oracle rendszer kezelni fogja a változatosságokat, mint egy táblázat, bár valójában a gyűjtemény szubkután, funkciója vagy más konstruktorja lehet. Mindenesetre a gördülő kifejezéssel visszaadott értéknek beágyazott asztalnak vagy varraynak kell lennie.

Visszatérő kifejezés

A parancs által érintett sorok, ahol a törlés parancs jellemzően csak a távoli húrok számát adja vissza. A visszatérő javaslat használható, ha a parancs célja asztal, egy alapított nézet vagy ábrázolás egy alaptáblával. Ha az ajánlatot egyetlen sor törlésekor használják, akkor a kifejeztetés által meghatározott távoli karakterláncból származó értékeket pl / sql változók és kötőváltozók (kötőváltozók) tárolják. Ha a javaslatot sok sor eltávolításakor használják, akkor a mezőgazdasági és m által meghatározott távoli húrok értékei kötődnek a kötőelemek (kötő tömbök).

Változóvá válik

Adja meg azokat a változókat, amelyekben a visszatérés javaslatának eredményeként visszaküldött értékek.

Az Oracle utasítás törlése során visszaállítja a helyet az asztalra vagy indexre, ahol az adatokat a táblázatban (vagy az alaptáblázatban) tárolták.

Ha az adatok törlődnek a prezentáció, a kilátás nem tartalmazhat a műveletek készletek, a határozott kulcsszó, kapcsolatok, összesítő függvényt analitikus függvény, subqueries SELECT, ajánlatok GROUP BY, ajánlatok Rendezés, ajánlatok Connect vagy az Indítás Wit.

Az alábbi példa az, amelyben egy távoli kiszolgáló adatokat törölünk.

Törlés Scottból. [E-mail védett];

A következő példában

töröljük az adatokat a gyűjtemény kifejezésében megadott táblázatból.

Táblázza a táblázatot (Válassza ki a kapcsolatot az ügyfelektől

ahol c.customerid \u003d "bottm") s, ahol s. A régió null vagy s.country \u003d "Mexico";

De egy példa a szakasz törlésére.

Törlés az értékesítési partícióból (SALES_Q3_1997), ahol QTY\u003e 10000;

Végül, a következő példában a visszatérő javaslatot a távoli értékek megtekintéséhez használjuk.

Törölje a munkavállalót, ahol a JOB_ID \u003d 13

És hire_date + to_yminterval ("01-06") \u003d.

Az előző példában a munkavállalói táblázatból származó bejegyzések törlődnek, és a J obi vl értékei egy előre meghatározott változóba kerülnek: Intol.



Tetszett a cikket? Oszd meg