PDA

View Full Version : Inserire una condizione nella Stringa SQL


race2
04-04-2003, 16:33
Ho una tabella dove voglio estrarre dei dati in base ad una condizione,

se la condizione e' True deve estrarre in base ad un parametro,
se la condizione e' False deve estrarre in base ad un altro parametro,

quindi:
----------------------------------------------------------------------------------
SELECT * FROM Tabella WHERE IF(1=1, ID_Tabella='1', ID_Tabella='2')
----------------------------------------------------------------------------------
in questo caso la condizione e' True e quindi estrae in base a: ID_Tabella='1',

----------------------------------------------------------------------------------
SELECT * FROM Tabella WHERE IF(1=2, ID_Tabella='1', ID_Tabella='2')
----------------------------------------------------------------------------------
in questo caso la condizione e' False e quindi estrae in base a: ID_Tabella='2',

e tutto questo funziona su "MySQL" ,

io devo fare questo su "SQL Server 2000", come devo fare ???

cisky
07-04-2003, 12:52
Al posto dell'istruzione IF in SQL Server devi usare

(CASE WHEN Espressione THEN Condizione1 ELSE Condizione2 END)

Es:
IIF(1=1,tblA.ID,tblB.ID) as MultiTableID

Diventa:
(CASE WHEN 1=1 THEN tblA.ID ELSE tblB.ID END) AS MultiTableID

race2
10-04-2003, 14:28
sono a testare definitivamente il programma,

con la seguente STRINGA SQL mi estrae perfettamente tutto, solo che non mi rispetta le ultime 2 condizioni (..parametri..) ---> AND Cronologia.Vendita='4' AND Cronologia.ID_Cliente='" & _ID_Cliente_ & "'

non so come fare per fare rispettare pure questi parametri...!!!

sono assolutamente necessari questi 2 parametri........!!!

la stringa attualmente mi estrae tutto, sensa rispettare quei 2 parametri...!!!



SELECT Cronologia.ID_Cronologia,Articoli.Articolo,Contratti.Contratto,Cronologia.Quantita,Cronologia.Data_Vendita,Cronologia.Nome_Referente,Cronologia.Cognome_Referente,Cronologia.Email_Referente,Cronologia.Tel_Referente,Cronologia.Fax_Referente,Cronologia.Note_Vendita FROM Cronologia LEFT JOIN Articoli ON Cronologia.ID_Articolo=Articoli.ID_Articolo LEFT JOIN Contratti ON Cronologia.ID_Contratto=Contratti.ID_Contratto AND Cronologia.Vendita='4' AND Cronologia.ID_Cliente='" & _ID_Cliente_ & "'

cisky
10-04-2003, 19:05
Scusa non ho capito una cosa ...

questa SQL funziona anche in SQL server ???

... perchè non vedo la proposizione WHERE!

... non dovrebbe essere WHERE Cronologia.Vendita='4' AND Cronologia.ID_Cliente='" & _ID_Cliente_ & "' ????

:confused:

race2
11-04-2003, 08:25
Infatti!!!

hai ragione tu !!!

ecco perceh non mi considera le ultime 2 condizioni .........

OK problema risolto, GRAZIE mille !!!

ciao!

ghego
11-04-2003, 08:28
Dato che usi un join al posto del WHERE si usa l' ON :D

race2
11-04-2003, 14:46
e se lascio WHERE cosa succede dato che funziona ????

cisky
13-04-2003, 00:45
e se lascio WHERE cosa succede dato che funziona ????

Non cambia niente perchè un join del tipo

SELECT * FROM tabellaA INNER JOIN tabellaB ON tabellaA.IdA = tabellaB.IdB

... equivale a scrivere ...

SELECT * FROM tabellaA WHERE tabellaA.IdA = tabellaB.IdB

.... Personalmente credo che il collegamento tra due campi vada sempre espresso tramite espressione JOIN (E' più corretto come standard S.Q.L.). Invece se devi specificare particolari valori è meglio definirli nella proposizione WHERE.

Anche perchè questo discorso vale solo per gli INNER JOIN (Semplici).In caso di LEFT o RIGHT JOIN multipli,le condizioni WHERE da scrivere risulterebbero abbastanza complicate!

race2
13-04-2003, 09:48
ok molte grazi , spiegazione perfetta, ciao alla prossima!!