kann ich da jetzt noch ne union mit not exists anhängen?
Announcement
Collapse
No announcement yet.
Bei leerem Abfrageergebnis Standardwerte setzen
Collapse
X
-
-
!?
Ja, ich bekomme viele Ausgaben... Leider nicht die, die ich benötige.
Da ich schon ne gefühlte Ewigkeit daran herum bastele werden meine grauen Haare immer mehr......
das Problem in dem Beispiel Union mit not exists ist, dass ich wenn der Datensatz im ersten Teil leer ist (Belegung) nicht weiter nach dem PC gepüft wird ( Temp)....
Werde heute abend nochmal einen Versuch starten...... Das ganze ist mir noch ein wenig abstrakt. Eine fertige Abfrage nachvollziehen ist etwas einfacher. Aber diese Geschichte ist etwas schwieriger für mich.
Mein Problem sind die verschiedenen Möglichkeiten im Ergebnis.
Datensatz gültig ja/nein oder erst garnicht vorhanden dann gültig ja und bearbeitet ja/nein
ich geb aber nicht auf..... Habe ja gute (und geduldige) Hilfe
Comment
-
Hallo,
Originally posted by A.DA View Post...wenn der Datensatz im ersten Teil leer ist (Belegung) nicht weiter nach dem PC gepüft wird ( Temp)....
Gruß FalkWenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.
Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!
Comment
-
http://sqlfiddle.com/#!2/d87e2/41
die RaumID 601 ist in der Belegung 2x vorhanden und in der TEMP nicht.
setze die RaumID auf 600 in der Abfrage und siehe was passiert
die RaumID 600 ist in der Belegung nicht vorhanden jedoch im TEMP
wenn die 600 in beiden tabellen nicht zu finden ist sollen feste werte vergeben werden.
ist die 600 nur in einer der beiden Tabellen vorhanden soll für die NULL der jeweiligen tabelle ein fix Wert eingetragen werdenZuletzt editiert von A.DA; 21.01.2014, 17:50.
Comment
-
Originally posted by A.DA View Posthttp://sqlfiddle.com/#!2/d87e2/41
die RaumID 601 ist in der Belegung 2x vorhanden und in der TEMP nicht.
setze die RaumID auf 600 in der Abfrage und siehe was passiert
die RaumID 600 ist in der Belegung nicht vorhanden jedoch im TEMP
wenn die 600 in beiden tabellen nicht zu finden ist sollen feste werte vergeben werden.
ist die 600 nur in einer der beiden Tabellen vorhanden soll für die NULL der jeweiligen tabelle ein fix Wert eingetragen werden
Ich habe mal folgendes gemacht (für das Kernstatement). Deine Kennzahl RaumID als separate Datenquelle angelegt (Technik: Virtuelle Tabelle ), spart in dem Fall auch die verteilten ID zu editieren/anzupassen. Daran per Outer Join Deine beiden Datentabellen, jede von den beiden Tabellen hängt nun "frei" an der (virtuellen) Haupttabelle und kann wg Outer Join ergebnisse liefern oder eben nicht.
http://sqlfiddle.com/#!2/d87e2/56
[highlight=SQL]
SELECT bel.raumID,
md5(concat(bel.buch, bel.platzID, bel.bel_status)) AS md5hash,
if(md5(concat(bel.buch, bel.platzID, bel.bel_status)) =
'37eb62340f800d7f9e2f6f6c850860f2',
'ja',
'nein') AS gueltig,
pc. *,
Date_Format(temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s') AS tag,
if(temp.raumID = '600' AND temp.pcID != '34', 'ja', 'nein') AS inBearbeitung
FROM (select 600 as RID) x
left join ac_alle_belegung AS bel
on x.rid = bel.raumid
left JOIN ac_alle_temp AS TEMP
ON TEMP.raumID = x.rID
LEFT JOIN ac_alle_pc AS pc
ON pc.pcID = TEMP.pcID
[/highlight]
Grundsätzlich (meine Standardhinweise):
SQL arbeitet mit Mengen. Bilde geeignete Teilmengen, deren Ergebnisse Du mit bloßem Auge validieren kannst (Dazu gehören kleine Mengen Testdaten). Bau aus den Abfragen zu den Teilmengen Dein Gesamtkunstwerk. SQL Statements zu verschachteln tut nicht weh, mit aussagekräftigen Alias und ein paar Kommentaren versehen kann so auch später noch verstehen, was da gemacht wurde (oder zumindest, wie es gedacht war)
P.S: SQL Code einzurücken und ein bestimmtes Format einzuhalten ist eine sehr hilfreiche Sache, besonders wenn die Statements komplexer werden. Das Teil auf SQLFiddle funktioniert bei mir zwar nicht, aber es gibt genügend andere brauchbare SQL Online Formater, falls die hauseigenen Tools das nicht können.Gruß, defo
Comment
-
woauh...
feine Sache hab alle Szenarien durchprobiert, ich denke Deine Umsetzung reicht mir aus.....
Aber ich will es auch verstehen...
FROM (SELECT 600 AS RID) x
http://sqlfiddle.com/#!2/955fe/9
Comment
-
Originally posted by A.DA View PostAber ich will es auch verstehen...
was bedeutet denn Outer JOIN ? heute schon ein paar mal gelesen, jedoch keine wirkliche Erklärung dazu gefunden....
http://wikis.gm.fh-koeln.de/wiki_db/...n/Join-Typ-SQL
Lies Dir das mal durch oder andere Quellen und vor allem probier es aus!Gruß, defo
Comment
-
Äh, hast Du es einfach mal abgefragt?
Auch wenn nicht, das Ergebnis ist so übersichtlich, dass man es sich denken kann, oder?
Deine Anforderung, "ich brauche bestimmte Daten auf jeden Fall, entweder aus der einen oder der anderen Datenquelle in meinem SQL (From Clause mit 2 Datenquellen)" zwingt zu einem Outer Join, denn eine harte Einschränkung auf beiden Datenquellen würde bereits wenn die Daten in einer Quelle fehlen zu einem leeren Ergebnis führen.
Diese Outer Joins bringen aber das Problem mit sich, dass es auf der "offenen" Ergebnismenge schwierig ist, einschränkende Bedingungen zu definieren (bei Dir "..where ID=600.."), zumal wenn diese Einschränkung variable für 2 Datenmengen gilt.
Hier bietet das "Select 600 as ID" als virtuelle Kerntabelle des Outer Join Abhilfe.
Es gibt wie so oft viele Wege die nach Rom führen. Wenn Dich das alles so interessiert, solltest Du Dir mal ein Buch dazu besorgen und Dich gründlich damit auseinander setzen.Gruß, defo
Comment
-
Nein, ich kann nur sagen, dass es echte Grundlagen sind und ein vermutlich x-beliebiges Buch Dir sehr viel weiterhelfen würde. Für den Anfang reicht sicher auch ein Internet Tutorial.
Dabei ist es auch relativ egal, um welche Datenbank es sich handelt, die Prinzipien sind immer gleich, die Syntax irgendwann etwas unterschiedlich (siehe z.B. Virtuelle Tabelle/ Select xy [from dual).
Allerdings kann man an der Stelle noch mal darauf hinweisen, dass das Ausgangsproblem zu ganz verschiedenen Lösungen führen kann. Siehe die ersten Antworten zu Deiner Frage. Das ist aber m.E. eine Glaubensfrage oder von Fall zu Fall bzw. Gesamtlösung zu Gesamtlösung unterschiedlich zu sehen.
In dem Moment, wo ich einen Komplexitätsgrad erreiche, den ich per SQL nicht mehr handlen kann, ist ein griffiges IF THEN ELSE im Client sicher die bessere oder zumindest schnellere Lösung.Gruß, defo
Comment
Comment