Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Intersect im Tquery sql (https://www.delphipraxis.net/92182-intersect-im-tquery-sql.html)

The_ New_Guy 15. Mai 2007 21:00

Datenbank: paradox • Version: 7 • Zugriff über: Tquery,Ttable

Intersect im Tquery sql
 
hi warum funktioniert intersect nicht im delphi sql?

gibt es einen vergleichbaren befehl um abfragen zu verknüpfen???


Beispiel:
SQL-Code:
Select * from this
intersect
select * from that

The_ New_Guy 15. Mai 2007 21:02

Re: Intersect im Tquery sql
 
hmmmm 'union' scheint zu funktionieren . ..

mkinzler 15. Mai 2007 21:02

Re: Intersect im Tquery sql
 
Du scheinst UNION zu meinen:
SQL-Code:
Select * from this
UNION
select * from that

The_ New_Guy 15. Mai 2007 21:03

Re: Intersect im Tquery sql
 
nein intersect bedeutet schnittmenge - das gibts auch.

The_ New_Guy 15. Mai 2007 21:04

Re: Intersect im Tquery sql
 
WARUM muss eigentlich immer nur Mkinzler fürs antworten herhalten?
das ist nicht fair :mrgreen: (aber großes dankeschööön an dich)

mkinzler 15. Mai 2007 21:05

Re: Intersect im Tquery sql
 
Dann bist du mit einem Join oder subselect gut bedient

The_ New_Guy 15. Mai 2007 21:07

Re: Intersect im Tquery sql
 
a-ha join -

ich muss verschidene select abfragen verknüpfen.
Jede dieser select anweisungen hebt bestimmte datensätze aus.

zum schluss soll aber nur das 'rauskommen', was in allen abfragen gleichzeitig vorhanden ist (schnittmenge aller abfragen)

ne idee?

MrSpock 15. Mai 2007 21:08

Re: Intersect im Tquery sql
 
intersect gehört nicht zum Sprachumfang von local SQL

The_ New_Guy 15. Mai 2007 21:09

Re: Intersect im Tquery sql
 
jo.*verdammt* was mach ich denn jetzt am besten ?

mkinzler 15. Mai 2007 21:09

Re: Intersect im Tquery sql
 
Wie sieht dies und das aus?

The_ New_Guy 15. Mai 2007 21:11

Re: Intersect im Tquery sql
 
ich glaub ich habs. ich erstelle mehrere tquerys und vergleiche den primärschlüssel.

so. das ist wohl die hackebeilmethode -

das mach ich wenn keiner es besser weiss :mrgreen:

mkinzler 15. Mai 2007 21:12

Re: Intersect im Tquery sql
 
Wir müßten die Struktiur der Tabellen kennen um die besser zu helfen. Aber ich glaube eine Subquery sollte hier das Richtige sein.

The_ New_Guy 15. Mai 2007 21:12

Re: Intersect im Tquery sql
 
wens interessiert;
mein code:


Delphi-Quellcode:
  Query1.Sql.Clear;

  gl_kat := combobox2.ItemIndex; // die kombobox bei itemindex 0 liefert nichts zurück
     if gl_kat = 1 then
     query1.SQL.Add('select * from exceltabDatabase where gl <= 5');

     if gl_kat = 2 then
     query1.SQL.Add('select * from exceltabDatabase where gl between 6 and 10');

     if gl_kat = 3 then
     query1.SQL.Add('select * from exceltabDatabase where gl between 11 and 15');

     if gl_kat = 4 then
     query1.SQL.Add('select * from exceltabDatabase where gl > 15');



    if not((checkbox2.Checked = false) and (checkbox3.checked = false)) then
    begin
      if gl_kat > 0 then query1.SQL.Add('Intersect'); // intersect gibts ja nich leider.

      if checkbox2.Checked = true then
      begin
        query1.SQL.Add('Select * from exceltabdatabase where erfolg = 0');
      end;

      if checkbox3.Checked = true then
      begin
        query1.SQL.Add('Select * from exceltabdatabase where erfolg = 1');
      end;
    end;

The_ New_Guy 15. Mai 2007 21:16

Re: Intersect im Tquery sql
 
theoretisch könnte man ja auch eine ganz grosse abfrage machen . .. aber wie all diese sql's verbinden, wenn ich nicht immer weiss ob die vorherige abfrage true war -es muss ja immer select am anfang stehen .. .

mkinzler 15. Mai 2007 21:18

Re: Intersect im Tquery sql
 
Wie sollte die Schnittmenge aussehen?

The_ New_Guy 15. Mai 2007 21:20

Re: Intersect im Tquery sql
 
naja angenommen die kombobox ist auf itemindex = 1, checkbox2 = true.

dann brauche ich alle einträge die gl(integer) unter 6 haben und dabei GLEICHZEITIG erfolg = 0 haben, keine anderen einträge von exceltabdatabase.

versteht ihr mein Problem?

mkinzler 15. Mai 2007 21:22

Re: Intersect im Tquery sql
 
Das kannst du doch in einer einfachen Abfrage durch Verknüpfung der Bedingungen machen

The_ New_Guy 15. Mai 2007 21:23

Re: Intersect im Tquery sql
 
jo ich weiss, aber wie all diese abfragen verbinden ohne irgendwelche sql-grundstrukturen zu brechen?

stell dir vor, ich habe noch viel mehr als die paar abfragen in meinem Beispiel.
die müssen alle irgendwie richtig verknüpft werden . . .

The_ New_Guy 15. Mai 2007 21:28

Re: Intersect im Tquery sql
 
Beispiel: wie soll ich es schaffen, das er den select befehl richtig einträgt - ich könnte den select befehl automatisch am anfang setzen, allerdings was ist, wenn KEINE aller aussagen zutrifft?, dann brauche ich lediglich eine leere sql stringliste

The_ New_Guy 15. Mai 2007 21:29

Re: Intersect im Tquery sql
 
ist ein haariges problem. daher werde ich es wohl so machen wie auf seite 1 beschrieben - mit mehreren tquerys. Wie kann ich Datensätze manuell in ein einziges t_query objekt eintragen ?

mkinzler 15. Mai 2007 21:29

Re: Intersect im Tquery sql
 
Du könntest mit zwischengespeicherten Abfragen arbeiten und so eine Art Derived Table nachbilden.
Aber was spricht den gegen die Verkettung der Bedingungen?

The_ New_Guy 15. Mai 2007 21:35

Re: Intersect im Tquery sql
 
ich versuchs mal mit verkettung.

meine lösung werd ich dann posten -
(das versuch ich übrigens immer zu machen, denn ich mags nicht wenn leute einfach sagen 'hat sich erledigt' und nicht die lösung posten :mrgreen: )

The_ New_Guy 15. Mai 2007 21:40

Re: Intersect im Tquery sql
 
Delphi-Quellcode:
  Query1.Sql.Clear;
  query1.SQL.Add('select * from exceltabdatabase ');

  gl_kat := combobox2.ItemIndex;
     if gl_kat = 1 then
     query1.SQL.Add('where gl <= 5');

     if gl_kat = 2 then
     query1.SQL.Add('where gl between 6 and 10');

     if gl_kat = 3 then
     query1.SQL.Add('where gl between 11 and 15');

     if gl_kat = 4 then
     query1.SQL.Add('where gl > 15');



    if not((checkbox2.Checked = false) and (checkbox3.checked = false)) then
    begin
      if gl_kat > 0 then query1.SQL.Add('and') else query1.SQL.Add('where');

      if checkbox2.Checked = true then
      begin
        query1.SQL.Add(' erfolg = 0');
      end;

      if checkbox3.Checked = true then
      begin
        query1.SQL.Add(' erfolg = 1');
      end;
    end;
funktioniert so. allerdings mal schaun wie ich ALLE abfragen unter einen hut bekomm'

The_ New_Guy 15. Mai 2007 22:09

Re: Intersect im Tquery sql
 
Delphi-Quellcode:
  Query1.Sql.Clear;
  query1.SQL.Add('select * from exceltabdatabase ');
  start := true;

  gl_kat := combobox2.ItemIndex;
  if gl_kat <> -1 then
  begin
    start := false;
    query1.sql.add(' where ');

    if gl_kat = 1 then
    query1.SQL.Add(' gl <= 5');

    if gl_kat = 2 then
    query1.SQL.Add(' gl between 6 and 10');

    if gl_kat = 3 then
    query1.SQL.Add(' gl between 11 and 15');

    if gl_kat = 4 then
    query1.SQL.Add(' gl > 15');
   end;

    if not((checkbox2.Checked = false) and (checkbox3.checked = false)) then
    begin
      if start = false then query1.SQL.Add('and') else
      begin
        query1.SQL.Add('where');
        start := false;
      end;

      if checkbox2.Checked = true then
      begin
        query1.SQL.Add(' erfolg = 0');
      end;

      if checkbox3.Checked = true then
      begin
        query1.SQL.Add(' erfolg = 1');
      end;
    end;

    if checkbox4.Checked = true then
    begin
      if start = false then query1.SQL.add(' and ') else
      begin
        query1.SQL.add(' where ');
        start := false;
      end;
      query1.SQL.Add(' abrechnung_erfasst = 1');
    end;

    if checkbox1.Checked = true then
    begin
      if start = false then query1.SQL.add(' and ') else
       begin
        query1.SQL.add(' where ');
        start := false;
      end;
      query1.SQL.Add(' nur_beratung = 1');
    end;

    memo1.Lines := query1.SQL;
    memo1.Lines.Add(inttostr(combobox2.ItemIndex));

    refresh(false);
so wirds gemacht - danke an alle die mir tipps gegeben haben!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 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