![]() |
Datenbank: Firebird • Version: x • Zugriff über: ??
If-In SQL- aber wie?
Hallo!
Ich hab hier wieder einmal ein Problem. Ich möchte per sql-Statement folgendes machen:
Code:
Wie geht das? Ich weiß das es bei SQL irgendwie auch ein if else gab aber ich weiß nicht wie man das anwendet...
wenn Datensatz mit dem gesuchten Datum vorhanden dann:
Daten des Gefundenen Datensatzes Ändern ansonsten: neuen Datensatz anlegen Gruß Teekeks |
Re: If-In SQL- aber wie?
SQL-Code:
oder
case..when
SQL-Code:
if()
|
Re: If-In SQL- aber wie?
hmmm, wie sieht genau die Syntax aus? Ich werde mich auf jeden Fall mal weiter belesen...
EDIT: *arg* ich stelle gerade fest das ich hier Firebird nehme und nicht wie sonst MySQL... |
Re: If-In SQL- aber wie?
In FireBird:
SQL-Code:
bzw.
select iif( <Feld> = <Wert>; <Code wenn Bedingung war>; <Code, wenn Bedingung nicht wahr>), ... from ...
SQL-Code:
oder
select case <Feld> when <Wert1> then <Code bei Wert1> when <wert2> ... else <Code wenn kein Wert> ...
SQL-Code:
select case when <Bed1> then <Code bei Bed1> when <Bed2> ... else <Code wenn kein Wert> ...
|
Re: If-In SQL- aber wie?
Hmmm, was mach ich hier falsch?:
SQL-Code:
Mir scheint ich habe das Prinzip noch nicht wirklich verstanden...
SELECT iif( Datum=date'17.11.1858';select * From Arbeitszeiten where Datum='17.11.1858'; {ein Update befehl}) from ARBEITSZEITEN
|
Re: If-In SQL- aber wie?
So etwas ginge nur in einer SP oder enem execute block
Mit IIF(), case..when kann man nur Werte wählen/generieren z.B.
SQL-Code:
Select iif( Wert1 > Wert2, Wert1, Wert2) as wert from <Tabelle>;
|
Re: If-In SQL- aber wie?
|
Re: If-In SQL- aber wie?
Hmmm, nu meckert der rum das der "IF" nicht kennt....
Hier mal mein QC:
Delphi-Quellcode:
Der meckert wie gesagt gleich beim If rum :(
with Form1.Query do
begin close; sql.Clear; sql.Add('IF EXISTS(SELECT * FROM Arbeitszeiten WHERE Datum = date'''+dat+''' ) THEN'+#10+ 'UPDATE'+#10+ 'Arbeitszeiten'+#10+ 'SET'+#10); case Combobox1.ItemIndex of 0: sql.add(' B1 = '+inttostr(CBBeginn.ItemIndex)+#10+ ' E1 = '+inttostr(CBEnde.ItemIndex)+#10); 1: sql.add(' B2 = '+inttostr(CBBeginn.ItemIndex)+#10+ ' E2 = '+inttostr(CBEnde.ItemIndex)+#10); 2: sql.add(' B3 = '+inttostr(CBBeginn.ItemIndex)+#10+ ' E3 = '+inttostr(CBEnde.ItemIndex)+#10); 3: sql.add(' B4 = '+inttostr(CBBeginn.ItemIndex)+#10+ ' E4 = '+inttostr(CBEnde.ItemIndex)+#10); 4: sql.add(' B5 = '+inttostr(CBBeginn.ItemIndex)+#10+ ' E5 = '+inttostr(CBEnde.ItemIndex)+#10); end; sql.add('WHERE'+#10+ 'Datum = date'''+dat+''';'+#10+ 'ELSE'+#10+ 'INSERT INTO Arbeitszeiten'+#10+ '(B1,B2,b3,b4,b5,e1,e2,e3,e4,e5)'+#10+ 'VALUES'+#10+ '(:b1,:b2,:b3,:b4,:b5,:e1,:e2,:e3,:e4,:e5);'+#10+ ');'); with Params do begin ParamByName('b1').AsInteger:=0; ParamByName('e1').AsInteger:=0; ParamByName('b2').AsInteger:=0; ParamByName('e2').AsInteger:=0; ParamByName('b3').AsInteger:=0; ParamByName('e3').AsInteger:=0; ParamByName('b4').AsInteger:=0; ParamByName('e4').AsInteger:=0; ParamByName('b5').AsInteger:=0; ParamByName('e5').AsInteger:=0; case Combobox1.ItemIndex of 0: begin ParamByName('b1').AsInteger:=CBBeginn.ItemIndex*5+1; ParamByName('e1').AsInteger:=CBEnde.ItemIndex*5+1; end; 1: begin ParamByName('b2').AsInteger:=CBBeginn.ItemIndex*5+1; ParamByName('e2').AsInteger:=CBEnde.ItemIndex*5+1; end; 2: begin ParamByName('b3').AsInteger:=CBBeginn.ItemIndex*5+1; ParamByName('e3').AsInteger:=CBEnde.ItemIndex*5+1; end; 3: begin ParamByName('b4').AsInteger:=CBBeginn.ItemIndex*5+1; ParamByName('e4').AsInteger:=CBEnde.ItemIndex*5+1; end; 4: begin ParamByName('b5').AsInteger:=CBBeginn.ItemIndex*5+1; ParamByName('e5').AsInteger:=CBEnde.ItemIndex*5+1; end; end; end; execsql; Form1.SQLTransaction1.Commit; end; Woran kann das liegen? |
Re: If-In SQL- aber wie?
Du hast den Link aber bis zum Ende gelesen? :mrgreen:
|
Re: If-In SQL- aber wie?
schon, aber es müsste doch auch so gehen (es wurde ja nur geschrieben das dies nicht so schön ist und auf Schönheit kommt es bei mir nicht an :) ) oder hab ich noch was übersehen (mein Englisch ist ja nicht wirklich soo gut )? :gruebel:
|
Re: If-In SQL- aber wie?
Hi,
Zitat:
das UPDATE OR INSERT-Statement
SQL-Code:
oder wenn das nicht reicht,
UPDATE OR INSERT INTO <table or view> [(<column_list>)]
VALUES (<value_list>) [MATCHING <column_list>] [RETURNING <column_list> [INTO <variable_list>]] das MERGE-Statement
SQL-Code:
an.
<merge statement> ::=
MERGE INTO <table or view> [ [AS] <correlation name> ] USING <table or view or derived table> [ [AS] <correlation name> ] ON <condition> [ <merge when matched> ] [ <merge when not matched> ] <merge when matched> ::= WHEN MATCHED THEN UPDATE SET <assignment list> <merge when not matched> ::= WHEN NOT MATCHED THEN INSERT [ <left paren> <column list> <right paren> ] VALUES <left paren> <value list> <right paren> Voraussetztung Firebird 2.1. alex |
Re: If-In SQL- aber wie?
Hi Danke für eure Hilfe!
Auch an dich Alex (sieht ja spannend aus :) )! Aber ich hab das ganze jetzt Quick & Dirty gelöst: Die Logik über Lazarus, und nur einfache SELECTs und UPDATEs und so. Ganz simpel :D Auch wenn ich mich vermutlich noch mit dem anderen beschäftigen werde... Nur das hier muss bis übermorgen fertig werden... Gruß Teekeks |
Re: If-In SQL- aber wie?
Hallo,
zu #8: der Code in der #7 ist keine SQL-Abfrage, sondern eine Stored Procedure. Heiko |
Re: If-In SQL- aber wie?
Zitat:
Ganz simpel also, so wie das? :mrgreen:
SQL-Code:
alex
UPDATE OR INSERT INTO Arbeitszeiten (DATUM, B1, E1, B2, E2, B3, E3, B4, E4, B5, E5)
VALUES (:DATUM, :B1, :E1, :B2, :E2, :B3, :E3, :B4, :E4, :B5, :E5) MATCHING (DATUM); |
Re: If-In SQL- aber wie?
WTF!
Nein, ich wusste ja nicht dass das so einfach geht... Aber ich las das erstmal so wie ich es jetzt habe :) |
Re: If-In SQL- aber wie?
Zitat:
|
Re: If-In SQL- aber wie?
Zitat:
|
Re: If-In SQL- aber wie?
Was wieder beweist das es nicht so gut ist links zu posten,...
|
Re: If-In SQL- aber wie?
Zitat:
Einzig und alleine die Tatsache, dass Links durchaus eine gewisse Flüchtigkeit aufweisen, mag ich gelten lassen - ich persönlich empfinde allerdings den Nachteil der sowieso schon unüberschaubaren Redundanz an Informationen wesentlich schwerwiegender. |
Re: If-In SQL- aber wie?
Das größte Problem an dem ganzen war das einfach gesagt meine Englisch-Kenntnisse schlecht sind...
Ich habe mir schon die ganze Seite durchgelesen, habe aber anscheinend nicht verstanden worauf der da hinaus wollte... :) Gruß Teekeks :cat: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz