SQL (PostgreSQL)
#41
Inviato 19 ottobre 2011 - 13:39
#42
Inviato 19 ottobre 2011 - 13:40
Select Campo1, Campo2 FROM Tabella_A UNION Select Campo1, Campo2 FROM Tabella_B
Così ti estrae entrambe i campi e se ci sono uguaglianze vengono "distinctate" di default dalla union?
#43
Inviato 19 ottobre 2011 - 13:41
Meglio le JOIN
#44
Inviato 19 ottobre 2011 - 13:43
UNION = merda
Meglio le JOIN
ovvio, ma per una tabella di 4 record con la join ti incasini la vita e basta.
#45
Inviato 19 ottobre 2011 - 13:45
SELECT COALESCE(TRIM(A."Option"), TRIM(B."Option")), COALESCE(TRIM(A."Value") , TRIM(B."Value")), B."MultipleValue" FROM "HaiClientPluginOption" A RIGHT OUTER JOIN "PluginOption" B ON A."Option" = B."Option" WHERE B."Id" = 1;
#46
Inviato 19 ottobre 2011 - 13:49
Potrebbe anche andare ma ho un 3° campo che c'è solo nella tabella B e ciò invalida la union:
SELECT COALESCE(TRIM(A."Option"), TRIM(B."Option")), COALESCE(TRIM(A."Value") , TRIM(B."Value")), B."MultipleValue" FROM "HaiClientPluginOption" A RIGHT OUTER JOIN "PluginOption" B ON A."Option" = B."Option" WHERE B."Id" = 1;
ah ok allora che la join sia con te
ah e comunque:
SELECT COALESCE( TRIM(A."Option"), TRIM(B."Option") ), COALESCE( TRIM(A."Value") , TRIM(B."Value") ), B."MultipleValue" FROM "HaiClientPluginOption" A RIGHT OUTER JOIN "PluginOption" B ( ON A."Option" = B."Option" ) WHERE B."Id" = 1;
Curiamo l'indentazione per cortesia
#47
Inviato 19 ottobre 2011 - 13:54
#48
Inviato 19 ottobre 2011 - 14:08
Ma va a cagher! indenta il traffico di Roma prima di parlare
no dai roma perderebbe metà del suo fascino senza le smart sopra gli alberi
#49
Inviato 24 ottobre 2011 - 09:21
Spiego:
La tabella "PluginOption" ( è una tabella template quindi ha un id che corrisponde all'id di un plugin della tabella "HaiPlugin" (HAI stands for Human Abstract Interface).
Ogni plugin può essere usato da un HaiClient in un HaiProject e quindi, in un HaiClient, ha un suo SessionId visto che può essere usato più volte.
Quindi ho fatto una tabella "HaiClientPluginOption" (A) in cui la chiave è "HaiClientId + HaiPluginId + ProjectId + SessionId + Option".
Quindi ogni progetto, ha n clients che possono avere n plugins ognuno con un session id diverso ed una serie di options, univoche per ogni "session id" in quel client/progetto.
Ora, dal DB devo estrarre tutti campi dalla tabella "HaiClientPluginOption" che hanno gli id specificati nelle condizioni OPPURE, se non ci sono, dalla tabella template "PluginOption".
Come cazzo si fa visto che non ne esco fuori ?
La tabella "PluginOption" con id 1 ha 6 campi:
SELECT "Id", TRIM("Value") AS "Value", TRIM("Option") AS "Option", "MultipleValue" FROM "PluginOption" WHERE "Id" = 1;
Id | btrim | btrim | MultipleValue
----+-------------------------------------+-------------------------+---------------
1 | AUDIO.5.1.1;AUDIO.5.2.2;AUDIO.5.3.3 | inputKey | t
1 | jconf.both | jInitFile | f
1 | VSS.1.1.2 | managementKey | f
1 | GOOFY.6.6.6 | recognictionControl.foo | f
1 | CMD.6.6.6.6 | recognictionControl.key | t
1 | CMD.5.5.5.5 | resultControl.key | f
(6 rows)
La tabella "HaiClientPluginOption" con SessionId 3 non ha niente ma la query non mi torna niente manco dalla tabella "PluginOption":
SELECT COALESCE(TRIM(A."Option"), TRIM(B."Option")) AS "Option", COALESCE(TRIM(A."Value") , TRIM(B."Value")) AS "Value", B."MultipleValue" FROM "HaiClientPluginOption" A FULL OUTER JOIN "PluginOption" B ON (true) WHERE B."Id" = 1 AND COALESCE(A."HaiClientId", 1) = 1 AND COALESCE(A."HaiPluginId", 1) = 1 AND COALESCE(A."ProjectId" , 1) = 1 AND COALESCE(A."SessionId" , 3) = 3 ORDER BY "Option";
Option | Value | MultipleValue
--------+-------+---------------
(0 rows)
#50
Inviato 24 ottobre 2011 - 12:22
#51
Inviato 04 novembre 2011 - 13:25
DELETE FROM "HaiClientPlugin" WHERE ("ProjectId", "ClientId") NOT IN (SELECT DISTINCT ("ProjectId", "ClientId") FROM "HaiProjectClient");
Su Oracle andrebbe ma a postcoso WHERE ("ProjectId", "ClientId") NOT IN non piace
#52
Inviato 04 novembre 2011 - 14:31
Come faccio una query del genere su postgresql ?
DELETE FROM "HaiClientPlugin" WHERE ("ProjectId", "ClientId") NOT IN (SELECT DISTINCT ("ProjectId", "ClientId") FROM "HaiProjectClient");
Su Oracle andrebbe ma a postcoso WHERE ("ProjectId", "ClientId") NOT IN non piace
Con un semplice AND non funziona?
E IIRC "EXCEPT ALL" è parecchio più veloce del NOT IN su PgSQL. E puoi forse usare USING invece della doppia select, ma non è standard.
#53
Inviato 04 novembre 2011 - 14:45
Ora ho capito perché postgresql è gratis.
#54
Inviato 04 novembre 2011 - 14:47
Si l'ho fatta con un AND ma fa schifo a vedersi.
Ora ho capito perché postgresql è gratis.
Guarda, al 90% il modo c'è ma sei te che non lo conosci
Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello
#55
Inviato 04 novembre 2011 - 14:58
Ho letto su postgresql doc che il left-side del NOT IN deve essere un singolo valore.
@[/url]":10u0b5wg] Si l'ho fatta con un AND ma fa schifo a vedersi.
Ora ho capito perché postgresql è gratis.
Guarda, al 90% il modo c'è ma sei te che non lo conosci
Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello
Forse c'è qualche altro operatore che non conosco.
#56
Inviato 04 novembre 2011 - 15:46
Ho letto su postgresql doc che il left-side del NOT IN deve essere un singolo valore.@[/url]":4c28lb7g]
Guarda, al 90% il modo c'è ma sei te che non lo conosci
Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello
Forse c'è qualche altro operatore che non conosco.
Ah, che merda
#57
Inviato 04 novembre 2011 - 16:03
Ho letto su postgresql doc che il left-side del NOT IN deve essere un singolo valore.@[/url]":ip7c2e71]
Guarda, al 90% il modo c'è ma sei te che non lo conosci
Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello
Forse c'è qualche altro operatore che non conosco.
Provato con USING?
E scrivere un parser SQL non è un gioco da ragazzi, cribbio!
#58
Inviato 04 novembre 2011 - 17:31
Semmai dovrebbe funzionare il delete cascade con le foreign keys ma c'è qualche problema nell'assegnare la foreign key.
Magari lunedì post il design del db, forse ho fatto qualche cazzata anche se mi sembra tutto giusto.
#59
Inviato 11 novembre 2011 - 11:15
Ho fatto una tabella:
CREATE TABLE "OptionsGUI"
(
"Username" character(16) NOT NULL,
"AutoConnectToDB" boolean NOT NULL DEFAULT true,
"AutosaveOnAddDel" boolean NOT NULL DEFAULT true,
"Language" character(2) NOT NULL DEFAULT 'en'::bpchar,
CONSTRAINT og_user_prikey PRIMARY KEY ("Username")
)
WITH (
OIDS=FALSE
);
#60
Inviato 13 aprile 2012 - 13:38
In una tabella (quella da cui partono le strisce rosse) il campo "ObjectId" dovrebbe essere la foreign key dell'Id di un'altra ma non si sa di quale, potrebbero (per ora) essere 2 le candidate, "Grammar" e "TemplateIds". Quale delle 2, lo decide il campo "ObjectType".
Ovviamente ciò non è possibile ma mi piacerebbe che il "ObjectId" fosse verificato dal DB quando inserito, come succede quando crei una foreign key.
Oltre ad un trigger, qualcuno ha idee buone ?