AGB  ·  Datenschutz  ·  Impressum  







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

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 5  1 23     Letzte » 
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
617 Beiträge
 
Delphi XE5 Professional
 
#1

in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 10:58
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Hallo Zusammen,

ich komme bei einer Abfrage leider nicht weiter und bitte Euch um Hilfe.

Ich habe eine sehr große Tabelle mit Auftragsdaten aus mehrere Jahren. Die Tabelle ich so vereinfacht aufgebaut:

AuftragsNr-----Arbeitsgang------Fertigdatum
4710815------------10------------20181215
4710815------------20------------20181218
4710815------------30------------20181223
4710815------------40------------20190110
4710815------------50------------20190115
7878787------------10------------20181015
7878787------------20------------20181018
7878787------------30------------20181023
7878787------------40------------20181110
7878787------------50------------20181115
5656565------------10------------20190115
5656565------------20------------20190118
5656565------------30------------20190123
5656565------------40------------20190210
5656565------------50------------20190215
andere Aufträge.

Ich brauche jetzt eine Abfrage, die mir alle Aufträge mit allen Arbeitsgänge auswirft, die bei einem Arbeitsgang das Fertigdatum in 2018 haben.
Also soll das Ergebnis so aussehen:
AuftragsNr-----Arbeitsgang------Fertigdatum
4710815------------10------------20181215
4710815------------20------------20181218
4710815------------30------------20181223
4710815------------40------------20190110
4710815------------50------------20190115
7878787------------10------------20181015
7878787------------20------------20181018
7878787------------30------------20181023
7878787------------40------------20181110
7878787------------50------------20181115

Den Auftrag 5656565 nicht, weil er keinen Arbeitsgang hat, der in 2018 abgeschlossen wurde.

Mein Versuch
Delphi-Quellcode:
select * from tabelle
where AuftragNr in (
select AuftragNr from Tabelle where Year(FertigDatum) = 2018 group by AuftragNr)
Aber weil die Tabelle recht groß ist, raucht mir die Abfrage ab. Hat jemand eine schlauere Lösung, die ich ausprobieren könnte?

Vielen Dank
Patrick
Patrick

Geändert von Ykcim ( 8. Feb 2019 um 11:01 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.025 Beiträge
 
Delphi 7 Professional
 
#2

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 11:10
eventuell sowas?
select * from tabelle a where exists (select 1 from tabelle b where Year(b.Fertigdatum) = 2018 and a.AuftragsNr = b.AuftragsNr)
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
Ort: Neubrandenburg
19 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 11:15
Ist es unbedingt notwendig, eine Unterabfrage zu verwenden?
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.487 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 11:16
ich sehe da nicht, warum Du ein "where in" brauchst, wenn es auf einundderselben Tabelle abgefragt wird.

Außerdem würde ich ein "where in" -das m.E. nur für sowas wie "enums" gedacht ist bei großen Mengen immer als Join umformen.

Zuletzt würde ich niemals bei derartigen Abfragen mit Funktionen wie year() arbeiten. Derartiges immer mit einer Bereichsabfrage "<datefield> between <vondate> and <bisdate>" damit sollte es auf jeden Fall flott sein, wenn auf dem Datefield ein Index liegt und der Zugriff darauf nicht durch andere Sachen vermasselt wird.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.025 Beiträge
 
Delphi 7 Professional
 
#5

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
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#6

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 11:52
Code:
select * from tabelle where Fertigdatum > 20180000 and fertigdatum < 20190000
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
Ort: Neubrandenburg
19 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

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
4.147 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8

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
26.802 Beiträge
 
Delphi 10.3 Rio
 
#9

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
2.487 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: in-Klausel in großen Tabellen

  Alt 8. Feb 2019, 12:05
sag ich doch
Gruß, Jo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf