Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Brisanje iz 2 tabele

[es] :: Baze podataka :: Brisanje iz 2 tabele

[ Pregleda: 3327 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Brisanje iz 2 tabele29.10.2005. u 11:17 - pre 224 meseci
Imam tabele orders i orders_desc. Odnose se kao master-detail.
Tabela orders ima session_id polje koje ulazi u uslov po kojem brishem recorde.
Tabela orders_desc ima polje order_id kojim je povezana sa orders.id poljem.
Da li je moguce jednim query-jem obrisati recorde iz obe tabele?
Problem je sto orders tabela nema UVIJEK recorde u orders_desc.

Ja sam to rijesio sa 2 query-ja

Code:

DELETE ss_temp_order_desc FROM ss_temp_order_desc as t1, ss_temp_orders as t2 WHERE t1.order_id = t2.id and t2.session_id = '1ca382cec952f9428216b5970a003301'



DELETE ss_orders WHERE session_id='1ca382cec952f9428216b5970a003301'


Moze li stati u jedan?
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
217.16.84.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Brisanje iz 2 tabele29.10.2005. u 20:10 - pre 224 meseci
u prethodnjem postu si rekao da je to MySQL? Dali mozda zelis reci koja je to verzija?

btw, najbolje resenje je da imas InnoDB tabele i foreign key za master detail vezu sa cascade delete pravilom. Taka kada obrises master record, onda ti MySQL automatski obrise i detail recorde.


People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.vdial.verat.net.



+3 Profil

icon Re: Brisanje iz 2 tabele29.10.2005. u 20:41 - pre 224 meseci
Code:

DELETE FROM tabela1, tabela2 WHERE ...

Mada ovo ne radi na svim verzijama MySQL-a (radi na 4.1.x), uglavnom pogledaj FM za tvoju verziju kakva je sintaksa DELETE komande.

edit:sredjen code tag

[Ovu poruku je menjao _owl_ dana 30.10.2005. u 02:20 GMT+1]
Owl
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Brisanje iz 2 tabele29.10.2005. u 21:30 - pre 224 meseci
moze tako, medjutim imam WHERE gdje je order.session='4343443ffsd4' and order.id = order_desc.order_id.
To ce obrisati sve master recorde (i njihove details) koji imaju details, ukoliko ih nemaju, ostace master recordi.

ovo sa InnoDB bi mozda moglo proci, interesuje me samo, da li hosting servisi mozda zabrane InnoDB tip tabela? Hocu reci, da li ce to raditi na svim 4.x mySQL bazama?.

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
80.77.145.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Brisanje iz 2 tabele31.10.2005. u 08:34 - pre 224 meseci
InnoDB je podrska je vec 3-4 godine stara, i novijim verzijama je po default aktivna tako da bi trebalo da je svi hosting podrzavaju, ali ipak, izuzeci su normalna pojava :-)
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Brisanje iz 2 tabele31.10.2005. u 09:31 - pre 224 meseci
Code:
create table test1(id int(11), session_id varchar(32))

create table test2(id int(11), test1_id int(11), descr text)

insert into test1 values(1, 'session1');
insert into test1 values(2, 'session2');
insert into test1 values(3, 'session3');

insert into test2 values(1, 1, 'opis1');
insert into test2 values(2, 2, 'opis2');
insert into test2 values(3, 3, 'opis3');
insert into test2 values(4, 1, 'opis4');
insert into test2 values(5, 1, 'opis5');
insert into test2 values(6, 2, 'opis6');
insert into test2 values(7, 3, 'opis7');
insert into test2 values(8, 2, 'opis8');
insert into test2 values(9, 1, 'opis9');


mysql> select * from test1;
+------+------------+
| id   | session_id |
+------+------------+
|    1 | session1   |
|    2 | session2   |
|    3 | session3   |
+------+------------+
3 rows in set (0.03 sec)

mysql> select * from test2;
+------+----------+-------+
| id   | test1_id | descr |
+------+----------+-------+
|    1 |        1 | opis1 |
|    2 |        2 | opis2 |
|    3 |        3 | opis3 |
|    4 |        1 | opis4 |
|    5 |        1 | opis5 |
|    6 |        2 | opis6 |
|    7 |        3 | opis7 |
|    8 |        2 | opis8 |
|    9 |        1 | opis9 |
+------+----------+-------+
9 rows in set (0.00 sec)

mysql> select * from test1 t1, test2 t2 where t2.test1_id = t1.id and t1.session_id = 'session1';
+------+------------+------+----------+-------+
| id   | session_id | id   | test1_id | descr |
+------+------------+------+----------+-------+
|    1 | session1   |    1 |        1 | opis1 |
|    1 | session1   |    4 |        1 | opis4 |
|    1 | session1   |    5 |        1 | opis5 |
|    1 | session1   |    9 |        1 | opis9 |
+------+------------+------+----------+-------+
4 rows in set (0.00 sec)

insert into test1 values(4, 'session bez detail recorda');

DELETE FROM test1.*, test2.* 
USING test1 
LEFT JOIN test2 
ON test2.test1_id = test1.id 
WHERE (test2.id IS NULL OR test2.id IS NOT NULL) 
AND test1.session_id = 'session bez detail recorda';


Samo zamijeni nazive tabela i polja...

Edit: Preuredjen code, radi bolje preglednosti...

[Ovu poruku je menjao StRiPy dana 31.10.2005. u 15:53 GMT+1]
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: Brisanje iz 2 tabele31.10.2005. u 11:24 - pre 224 meseci
Ne zaboravi da koristis transakciju u celoj stvari za ne daj boze.
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Brisanje iz 2 tabele31.10.2005. u 13:51 - pre 224 meseci
thx Stirpy, JOIN sam malo koristio tako da mi i nije pao na pamet.. I'll try

brooker: mySQL 4.1 koliko znam nema transakcije, 5ica ima, ali zasto? sta se moze desiti ruzno?

[Ovu poruku je menjao misk0 dana 31.10.2005. u 14:52 GMT+1]
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: Brisanje iz 2 tabele31.10.2005. u 23:06 - pre 224 meseci
http://dev.mysql.com/doc/refma...en/transactional-commands.html

Zasto ti je to potrebno?

Ako oradis neku obradu podataka koja podrazumeva da se vise obrada mora tretirati kao jedna, onda transakcija upravo to i obezbedjuje: kada pokrenes vise obrada u istoj transakciji, uvek mozes da prekines obrade time sto ces prekinuti transakcije i vratiti stanje u bazi koje je bilo na pocetku transakcije, znaci pre svih obrada koje pripadaju toj transakciji. Time cuvas integritet podataka. Siguran sam da i sam mozes lako zamisliti kakav rsum u bazi moze da se desi ako se niz obrada prekine u sred posla a ne postoji nacin da se obrade ili dovrse ili poniste.

 
Odgovor na temu

Riste Pejov
Team Leader/Senior Software Developer @
Ein-Sof ltd Skopje
Skopje, Macedonia

Član broj: 128
Poruke: 571
80.77.145.*

Jabber: richie@bagra.net.mk
ICQ: 154236769
Sajt: riste.softver.org.mk


Profil

icon Re: Brisanje iz 2 tabele01.11.2005. u 07:53 - pre 224 meseci
Pa covek koliko je rekao, ne koristi InnoDB tabele ... tako da transakcije su van diskusije. A ako koristi InnoDB onda svaki SQL statement je implicitna transakcija ... a posto nam je stripy pokazao da se moze u MySQL obrisati jednom SQL naredbom iz dve tabele tako da ukoliko covek koristi traksakcione MySQL tabele on automatski ima transakciju. Jedino explicitne transakcije trebaju ako zelis grupirati dva ili vise SQL statementa.

[Ovu poruku je menjao Riste Pejov dana 01.11.2005. u 08:54 GMT+1]
People who think they know everything tend to irritate those of us who do.
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Brisanje iz 2 tabele01.11.2005. u 08:32 - pre 224 meseci
Nemam toliko operacija nad bazom da imam potrebe za transakcijama. Rijec je o webshopu i uglavnom radim insert novih podataka.
U svakom slucaju hvala, a vjerovanto cu danas stici probati ovo sto je stripy napisao.

:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

misk0
.: Lugano :. _.: CH :.

SuperModerator
Član broj: 634
Poruke: 2824
*.adsl.ticino.com.

ICQ: 46802502


+49 Profil

icon Re: Brisanje iz 2 tabele07.11.2005. u 16:12 - pre 224 meseci
Citat:
stripy:
WHERE (test2.id IS NULL OR test2.id IS NOT NULL)


a zasto ovaj uslov?
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.infonova.at.

Sajt: www.baze-podataka.net


+2 Profil

icon Re: Brisanje iz 2 tabele08.11.2005. u 14:03 - pre 224 meseci
Moze i bez toga. :)
Ostalo izgleda prilikom testiranja nekih drugih kombinacija upita...
Je l' radi ovo rjesenje?
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

[es] :: Baze podataka :: Brisanje iz 2 tabele

[ Pregleda: 3327 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.