Vai al contenuto


Foto

SQL (PostgreSQL)


Questa discussione e' stata archiviata Questo significa che non e' possibile rispondere
96 risposte a questa discussione

#41 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 19 ottobre 2011 - 13:39

Ok, messo birra in frigo :challenge:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#42 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

Inviato 19 ottobre 2011 - 13:40

Scusate ma :

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 Nex

Nex

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 19.500 Messaggi:

Inviato 19 ottobre 2011 - 13:41

UNION = merda

Meglio le JOIN
Then I went to my pretty rose tree / To tend her by day and by night / But my rose turned away with jealousy / And her thorns were my only delight...

#44 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

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 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 19 ottobre 2011 - 13:45

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;


Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#46 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

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 :challenge:


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 :lol:

#47 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 19 ottobre 2011 - 13:54

Ma va a cagher! indenta il traffico di Roma prima di parlare :challenge:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#48 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

Inviato 19 ottobre 2011 - 14:08

Ma va a cagher! indenta il traffico di Roma prima di parlare :lol:


no dai roma perderebbe metà del suo fascino senza le smart sopra gli alberi :challenge:

#49 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 24 ottobre 2011 - 09:21

Prima funzionava perché non avevo messo le condizioni della tabella "HaiClientPluginOption" ma ora mi servono e non funge più.

Spiego:
La tabella "PluginOption" (:cereal: è 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)


Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#50 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 24 ottobre 2011 - 12:22

Si fottano le join, ho risolto con più queries tanto il tutto è gestito da una gui che sto facendo.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#51 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 04 novembre 2011 - 13:25

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 :poker:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#52 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

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 :trollface:


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.
In Soviet Italy, the evil army owns you!

#53 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 04 novembre 2011 - 14:45

Si l'ho fatta con un AND ma fa schifo a vedersi.
Ora ho capito perché postgresql è gratis.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#54 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

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 :trollface:


Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello :o

#55 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 04 novembre 2011 - 14:58

@[/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 :trollface:


Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello :o

Ho letto su postgresql doc che il left-side del NOT IN deve essere un singolo valore.
Forse c'è qualche altro operatore che non conosco.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#56 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

Inviato 04 novembre 2011 - 15:46

@[/url]":4c28lb7g]

Guarda, al 90% il modo c'è ma sei te che non lo conosci :trollface:


Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello :lol:

Ho letto su postgresql doc che il left-side del NOT IN deve essere un singolo valore.
Forse c'è qualche altro operatore che non conosco.


Ah, che merda :o

#57 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 04 novembre 2011 - 16:03

@[/url]":ip7c2e71]

Guarda, al 90% il modo c'è ma sei te che non lo conosci :trollface:


Comunque lo stile che hai usato te dovrebbe essere uno dei più compatibili quindi in ottica di portabilità terrei quello :lol:

Ho letto su postgresql doc che il left-side del NOT IN deve essere un singolo valore.
Forse c'è qualche altro operatore che non conosco.


Provato con USING?

E scrivere un parser SQL non è un gioco da ragazzi, cribbio! :o
In Soviet Italy, the evil army owns you!

#58 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 04 novembre 2011 - 17:31

Va beh dai, grazie ma funziona anche se la query è bruttina .
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.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#59 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 11 novembre 2011 - 11:15

Dio santo ho bisogno di una vacanza! :oki:

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
);


Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#60 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 13 aprile 2012 - 13:38

Ho un problema strano...

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 ?


Immagine inserita
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all