AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken in-Klausel in großen Tabellen
Thema durchsuchen
Ansicht
Themen-Optionen

in-Klausel in großen Tabellen

Ein Thema von Ykcim · begonnen am 8. Feb 2019 · letzter Beitrag vom 11. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2      
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#1

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 11:24
Also eher sowas?
SQL-Code:
select * from tabelle a where exists (
  select 1 from tabelle b
  where a.AuftragsNr = b.AuftragsNr
  and b.Fertigdatum between CAST('2018-01-01AS DATE) and CAST('2018-12-31AS DATE)
)
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 11:56
Eher so:

select * from tabelle where Fertigdatum >= '2018-01-01and Fertigdatum <= '2018-12-31'
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.458 Beiträge
 
Delphi 12 Athens
 
#3

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:01
Zitat:
Eher so:
Nö...nur mit Parametern aktzeptabel.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:04
Ich will auch mal:
SELECT [Feldliste] FROM [Tabelle] WHERE Fertigdatum BETWEEN :anfang AND :ende
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:05
sag ich doch
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:06
Sry, im Textfluss übersehen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
388 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 16:46
Moin,

ich erschlage solche Schwierigkeiten immer, in dem ich den Abfrageweg vorgebe. Bei manchen Abfragen mit select in, bin ich mir ob der Schlauigkeit von z.B. mysql nicht so sicher.
Vorraussetzung für en solches Vorgehen ist natürlich, dass man die Rechte hat, (temporäre) Tabellen zu erzeugen

Code:
/* Die relevanten Datensätze separieren */
DROP TABLE IF EXISTS tempt;
CREATE TEMPORARY TABLe tempt(select distinct AuftragsNr from Auftragstable where Fertigdatum >= '2018-01-01' and Fertigdatum <= '2018-12-31');
ALTER TABLE tempt ADD index(AuftragsNr);

/* Ursprungstabelle mit separierter Datenmenge joinen und voila (jedenfalls voila, wenn es einen Index gibt, der für die AuftragsNr zuständig ist*/
select a.* from Auftragstable a, tempt t
where a.AuftragsNr=t.AuftragsNr
Gruß
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 20:39
Warum eigentlich ein "in"?

SQL-Code:
select auftragsdaten.irgendwas
from auftragsdaten join (select distinct auftragsnr from auftragsdaten where fertigdate between 20180101 and 20181231) a on (auftragsdaten.auftragsnr=a.auftrgsnr)
so ungefähr, die korrekte Syntax und die between-Grenzen müßtest Du noch überprüfen.

Gruß
K-H

P.S.
Zumndest Oracle begrenzt die "in-Menge" auf 2000 Einträge.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#9

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:07
Es sollen aber alle Sätze zu den AuftragsNr angezeigt werden, zu denen "auch" einen Satz aus dem Jahr 2018 existiert und nicht "nur" die Sätze aus dem Jahr 2018. Man kommt also an einem IN oder einem adäquaten Join-Konstrukt nicht vorbei.

select * from tabelle where Fertigdatum >= '2018-01-01and Fertigdatum <= '2018-12-31' hat den Nachteil, dass hier (vermutlich) Fertigdatum zu einer Zeichenfolge konvertiert wird. Damit wird dann eine Indexnutzung (wahrscheinlich) hinfällig. Dabei gehe ich mal davon aus, dass es sich bei Fertigdatum um eine Spalte vom Typ DateTime, Date oder sowas handelt.

Und klar: Wenn mal das richtige SQL gefunden wurde, dann erfolgt die Wertübergabe per Parameter und nicht per "festverdrahteter" Konstanten im SQL.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#10

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:16
Sollte da ein einfacher INNER JOIN nicht ausreichen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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