Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 12 odgovora
  • 4.795 pregleda

Najnovija ↓

Brisanje iz 2 tabele 29.10.2005. u 12:17 · pre 255 meseci #1
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'

i 

DELETE ss_orders WHERE session_id='1ca382cec952f9428216b5970a003301'


Moze li stati u jedan?
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Brisanje iz 2 tabele 29.10.2005. u 21:10 · pre 255 meseci #2
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.

Potpis
People who think they know everything tend to irritate those of us who do.
Re: Brisanje iz 2 tabele 29.10.2005. u 21:41 · pre 255 meseci
izmenjeno 1 put, poslednji put _owl_ 30.10.2005. u 02:20
  1. _owl_30.10.2005. u 02:20zapis iz teksta poruke
#3
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
Potpis
Owl
Re: Brisanje iz 2 tabele 29.10.2005. u 22:30 · pre 255 meseci #4
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?.
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Brisanje iz 2 tabele 31.10.2005. u 09:34 · pre 255 meseci #5
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 :-)
Potpis
People who think they know everything tend to irritate those of us who do.
Re: Brisanje iz 2 tabele 31.10.2005. u 10:31 · pre 255 meseci
izmenjeno 1 put, poslednji put StRiPy 31.10.2005. u 15:53
  1. StRiPy31.10.2005. u 15:53zapis iz teksta poruke
#6
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...
Potpis
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
Re: Brisanje iz 2 tabele 31.10.2005. u 12:24 · pre 255 meseci #7
Ne zaboravi da koristis transakciju u celoj stvari za ne daj boze.
Re: Brisanje iz 2 tabele 31.10.2005. u 14:51 · pre 255 meseci
izmenjeno 1 put, poslednji put misk0 31.10.2005. u 14:52
  1. misk031.10.2005. u 14:52zapis iz teksta poruke
#8
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?
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Brisanje iz 2 tabele 01.11.2005. u 00:06 · pre 255 meseci #9
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.

Re: Brisanje iz 2 tabele 01.11.2005. u 08:53 · pre 255 meseci
izmenjeno 1 put, poslednji put Riste Pejov 01.11.2005. u 08:54
  1. Riste Pejov01.11.2005. u 08:54zapis iz teksta poruke
#10
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.
Potpis
People who think they know everything tend to irritate those of us who do.
Re: Brisanje iz 2 tabele 01.11.2005. u 09:32 · pre 255 meseci #11
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.
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Brisanje iz 2 tabele 07.11.2005. u 17:12 · pre 255 meseci #12
Citat:
stripy:
WHERE (test2.id IS NULL OR test2.id IS NOT NULL)


a zasto ovaj uslov?
Potpis
:: Nemoj se svadjati sa budalom, ljudi cesto nece primjetiti razliku ::
Re: Brisanje iz 2 tabele 08.11.2005. u 15:03 · pre 255 meseci #13
Moze i bez toga. :)
Ostalo izgleda prilikom testiranja nekih drugih kombinacija upita...
Je l' radi ovo rjesenje?
Potpis
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme