-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
Unter "Nützliches" befindet sich der SQL-Editor IIRC.
-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
Innerhalb der Klammer. Du ermittelst damit ja die unterschiedlichen PKs der Datensätze, die den Suchbedingungen entsprechen und holst daraus dann im äußeren SELECT erst die eigentlichen Daten.
-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
Genau, ganz am Schluss des Statements. Die Sortierung kann man dann auch noch schön dahinter unterbringen. Außerdem ist der Alias b doppelt vergeben, die äußere Abfrage kommt auch ohne Alias aus.
-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
Dann fällt mir als Workaround auf die Schnelle so etwas ein:
SELECT
*
FROM
bilder
WHERE
bid IN(
SELECT
DISTINCT A.bid
FROM
-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
Hat die Tabelle bilder einen Primärschlüssel? SQL-Tags gehen mit (ohne die Leerzeichen).
-
Forum: Datenbanken
Delphi
by DeddyH,
17. Jun 2011
Wie sieht denn das resultierende SQL aus?
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Wenn ich gewusst hätte, wie Deine Ergebnismenge aussehen soll, hätte ich Dir das gestern auch schon gesagt. Der entscheidende Hinweis kam ja erst heute ;)
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Genau, lass die WHERE-Klausel voerst ganz weg, JOINe alle benötigten Tabellen der Reihe nach zusammen und kontrolliere das Ergebnis (das sich nicht ändern sollte). Danach baust Du Dir dynamisch Deinen Filter zusammen und bist fertig.
@Jumpy: schau nochmal auf der ersten Seite nach, da wurde auch nur die WHERE-Klausel zusammengesetzt. Das einzige Schwierige dabei ist, dass sie halt mit WHERE...
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Wie gesagt, muss er ja gar nicht, es ändert sich lediglich die WHERE-Klausel je nach Stand der Checkboxen.
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Na, genauso ("LEFT JOIN Tabelle ON ..." vor der WHERE-Bedingung).
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Ob 2, 10 oder 200 Tabellen ist doch syntaktisch egal, das Muster ist immer dasselbe. Du musst da Tippfehler drinhaben oder sowas. Füg doch einfach mal eine nach der anderen Tabelle im JOIN dazu, bis es knallt. Das Statement kannst Du hier posten, dann können wir mal drüberschauen, was da nicht stimmen könnte.
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Den JOIN brauchst Du doch nur ein einziges Mal, was sich danach ändert, ist ja nur die Filterbedingung. Wenn Du als Basis das hier nimmst (Tabellen-/Feldnamen ersetzen):
SELECT
A.*
FROM
Tabelle1 A
LEFT JOIN
Zwischentabelle B ON B.Fremdschlüsselfeld = A.Primärschlüsselfeld
LEFT JOIN
Bildertabelle C ON C.Primärschlüsselfeld = B.Fremdschlüsselfeld
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Für einen OUTER JOIN kenne ich keine (offizielle) Variante ohne das Wort JOIN. Was ist denn daran so schlimm?
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Sry, ich hatte das Edit nicht gesehen. Ja, das geht, das wäre dann Deine Where-Klausel.
SELECT
Feldliste
FROM
Tabelle1 A
LEFT JOIN
Tabelle2 B ON B.FK = A.PK --Verknüpfungsbedingung(en)
WHERE
A.Feld1 = 'Dings' OR B.Feld1 = 'Bums' --Filterbedingung(en)
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
In der Wikipedia ist das IMO recht gut erklärt.
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Im Moment machst Du einen INNER JOIN über 3 Tabellen, das bedeutet, dass Du nur DS gelistet bekommst, die über alle Tabellen verknüpft sind. Was Du also brauchst, ist ein OUTER JOIN.
SELECT
Feldliste
FROM
Tabelle1 A
LEFT JOIN --oder auch LEFT OUTER JOIN, ist es aber automatisch
Tabelle2 B ON B.FK = A.PK
LEFT JOIN --oder auch LEFT OUTER JOIN, ist es aber automatisch
Tabelle3 C ON...
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Korrekt, AND hat eine stärkere Bindung als OR.
-
Forum: Datenbanken
Delphi
by DeddyH,
16. Jun 2011
Langsam zweifle ich daran, ob ich Dein Anliegen auch richtig verstanden habe. Daher frage ich lieber noch einmal nach: es soll so sein, dass Du z.B. in ein Edit "Hallo" eingibst und dann per Checkboxen festlegen willst, welche Felder nach diesem "Hallo" durchsucht werden sollen, ist das soweit richtig?
-
Forum: Datenbanken
Delphi
by DeddyH,
15. Jun 2011
Wo liegt der Sinn in einer UNION, wenn ich nur die WHERE-Klausel erweitern muss? Es sei denn, ich will die Quelle unterscheiden wie von p80286 vorgeschlagen. Aber es kommt eben darauf an, wie das Ergebnis aussehen soll.
-
Forum: Datenbanken
Delphi
by DeddyH,
15. Jun 2011
Jepp, der Stern im Subselect ist falsch, da darf man natürlich nur die Id abfragen. Hast Du mal das Statement aus meinem Edit versucht?
-
Forum: Datenbanken
Delphi
by DeddyH,
15. Jun 2011
So soll es doch am Ende aussehen, oder?
SELECT * FROM bilder b
WHERE UPPER(b.name) CONTAING UPPER(:WERT)
OR b.bid IN ( --b.bid IN fehlt bei Dir
SELECT * FROM bilder c
WHERE c.bid IN (
SELECT c1.bid FROM BILDER c1
JOIN zwbilderprogramme z ON z.bildid = c1.bid
JOIN programme t ON t.pid = z.programmid
WHERE UPPER(t.namep) CONTAING UPPER(:WERT)
-
Forum: Datenbanken
Delphi
by DeddyH,
15. Jun 2011
Das sieht irgendwie unnötig kompliziert aus. Was genau bezweckst Du denn mit dem Subselect? Außerdem: fehlt da nicht ein EXISTS vor der Klammer?
-
Forum: Datenbanken
Delphi
by DeddyH,
15. Jun 2011
Wie, lässt sich nicht adden? In diesem Moment ist das doch nichts anderes als eine stinknormale Stringliste. Zur Not kannst Du aber auch temporär eine solche erzeugen, das Statement dort zusammenbauen, Dir das Ergebnis ausgeben lassen, bei Gefallen dem SQL der Query zuweisen und diese ausführen.
-
Forum: Datenbanken
Delphi
by DeddyH,
15. Jun 2011
Der 2. (if p then) ist ja bereits der Subselect, da fehlt doch noch etwas. Wie gesagt, lass Dir das komplette Statement zur Kontrolle ausgeben.
ShowMessage(dm.dsetbilder.SelectSQL.Text); //ggf. erstmal ein exit; hierhin
dm.dsetbilder.Open;
Übrigens gibt es auch Delphi-Tags (die Schaltfläche mit dem Helm), dann sind auch die Hervorhebungen dabei.