PDA

View Full Version : sql avanzato e mysql


soalle
20-09-2002, 14:16
Mi chiedevo se era possibile (ne ho la necessità) effettuare query ricorsive del tipo WITH.... UNION ALL con mysql.

Grazie
Soalle

Python
20-09-2002, 16:30
mysql è conforme allo standard del linguaggio sql quindi dovresti poter fare tutto

di with non ne so nulla ma di union son sicurissimo che puoi usarlo :)

x quest'ultimo le tabelle le cui query devi unire devono avere la stessa struttura (nome e tipo di records)
poi puoi fare

SELECT * FROM tabella1 A
UNION
SELECT * FROM tabella1 B union

al posto di union puoi anche mettere UNION ALL che permette di ripetere dei record assolutamente identici

cionci
20-09-2002, 16:42
MySql non è full compliant con lo standard SQL '92 soprattutto perchè non supporta sottoquery nel WHERE (anche nel FROM non le supporta, ma quelle nel WHERE sono un po' più gravi visto che mi sembra che siano contemplate anche nello standard precedente)...

soalle
21-09-2002, 11:29
voi mi consigliereste mysql o postgres? (pregi e difetti di entrambi)

cionci
21-09-2002, 11:53
Dipende dal tipo di lavoro che ci devi fare...
MySQL attualmente lo vedo molto bene in applicazioni Web...perchè è molto veloce e permette di gestire un numero molto alto di query/secondo...magari proprio perchè non può gestire query molto complicate...
Poi, visto che le sue tabelle native (MyISAM) non supoortano le transazioni, ma solamente il locking, si adatta ancora di più al mondo web in cui servono molte query in lettura e poche (e semplici) di update/creazione...
Comunque le transazioni sono supportate sulle tabelle di tipo InnoDB...compreso il log file e quindi il recupero totale da crush...
Sono convinto che, quando in MySQL verrà aggiunta la possibilità di usare subquery (nella 4.1 credo), sarà un osso duro per tutti...anche per quelli commerciali...

Mentre PostgreSQL sembra (perchè non l'ho usato direttamente) un prodotto molto completo e complesso e forse anche per questo un po' più lento ;)

Quindi per il Web ovviamente MySQL...
Per Windows sceglerei MySQL...mi sembra molto stabile e ben integrato (al contrario di PostgreSQL) per Windows...
Per altre applicazioni sarebbe da valutare...anche se per applicazioni molto pese credo che PostgreSQL + Linux sia una scelta obbligata...

soalle
21-09-2002, 15:43
l'obiettivo è usarlo per il web ma a me interessava molto la possibilità di fare query ricorsive che non credo si possa con mySQL (con postgres non lo so)... adesso mi allontanerò dal computer per almeno 4-5 giorni poi farò delle prove con entrambi e vi dirò le mie impressioni.
Grazie
Soalle

cionci
21-09-2002, 15:50
Che sono le query ricorsive ? Mi fai un esempio ?

soalle
21-09-2002, 17:23
ho una tabella "Genitori" con campi Figlio e Genitore mi interessano tutti gli antenati di una data persona:

WITH antenati(Persona,Avo)
AS((SELECT Figlio, Genitore
FROM Genitori)
UNION ALL
(SELECT G.Figlio, A.Avo
FROM Genitori G, Antenati A
WHERE G.Genitore= A.Persona))

SELECT Aco
FROM Antenati
WHERE Persona = 'Pinco Pallino'

Così mi vengono fuori genitori, nonni, bisnonni, etc. di 'Pinco Pallino'
Può anche essere comodo in una tabella del tipo:
per fare il componente A ci vuole il componente B
per fare il componente B ci vuole il componente 2 C
per fare il componente B ci vuole il componente 3 D
etc...

Quanti e quali componenti o sottocomponenti ci vogliono per fare A?

PS: scusami ma per i prox 4 giorni sarò assente e non ti potrò rispondere (mi rubano il computer :(...)

cionci
21-09-2002, 17:38
No...non sono proprio possibili queste cose con MySQL...
Non so in PorstgreSQL...

cionci
21-09-2002, 17:45
Come ti dicevo PostgreSQL è un po' più compesso :eek:

http://www.brasileiro.net/postgres/cookbook/view-recipes.adp?section_id=310&format=long

soalle
21-09-2002, 17:53
grazie mille!!!
Alla fine della prox settimana proverò!!!
Ciao
Soalle