AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
Thema durchsuchen
Ansicht
Themen-Optionen

Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

Ein Thema von Codehunter · begonnen am 20. Dez 2018 · letzter Beitrag vom 21. Dez 2018
Antwort Antwort
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 20. Dez 2018, 14:29
Wenn man Zugriff auf den Source der SP hat wäre der beste Weg das Ergebnis für ID in einer loaklen Variable zu Speichern.

SQL-Code:
...
SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter) into :ID;
 
SELECT * FROM A WHERE A.FELD1 <> :ID;
...
Oder mal Testen, wie gut optimiert wird
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 20. Dez 2018, 15:32
Ich habe es mal mit derived table getestet.
Es sollte so:

SQL-Code:
select a.* from tabelle a
join (select distinct 'idfrom andereprozedur(irgendeinparameter)) b on b.id = a.feld1
where p2.id is null
gehen.


Laut Leistungsananlyse von IBExpert nur jeweils 1 Durchlauf (mit meinen Testtabellen...

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 07:24
SQL-Code:
select a.* from tabelle a
join (select distinct 'idfrom andereprozedur(irgendeinparameter)) b on b.id = a.feld1
where p2.id is null
Laut Leistungsananlyse von IBExpert nur jeweils 1 Durchlauf (mit meinen Testtabellen...
Interessante Idee. Auf einen Join wäre ich in dem Zusammenhang nicht gekommen. Ich vermute mal "p2.id" war hier ein Irrtum und "b.id" gemeint?
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 08:22
SQL-Code:
select a.* from tabelle a
join (select distinct 'idfrom andereprozedur(irgendeinparameter)) b on b.id = a.feld1
where p2.id is null
Laut Leistungsananlyse von IBExpert nur jeweils 1 Durchlauf (mit meinen Testtabellen...
Interessante Idee. Auf einen Join wäre ich in dem Zusammenhang nicht gekommen. Ich vermute mal "p2.id" war hier ein Irrtum und "b.id" gemeint?
Richtig

War ja auch schon spät...

Frank
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 08:51
SQL-Code:
select a.* from tabelle a
join (select distinct 'idfrom andereprozedur(irgendeinparameter)) b on b.id = a.feld1
where p2.id is null
Funktioniert leider nicht so wie gedacht. Denn dann würden nur diejenigen Datensätze zurückgegeben, wo a.feld1 = NULL ist. Entpricht also funktional nicht
SELECT * FROM A WHERE NOT A.FELD1 IN (SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter));
Man beachte das NOT: ... WHERE **NOT** A.FELD1 IN (SELECT DISTINCT ... Ohne das ginge das mit einem Join aber so fällt mir da spontan keine Lösung ein.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
jobo

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

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 08:55
Aber da fehlt doch dann nur das "left" vorm "join"

noch mal sorry, kleines Durcheinander
Gruß, Jo

Geändert von jobo (21. Dez 2018 um 08:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#7

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 10:03
Aber da fehlt doch dann nur das "left" vorm "join"

noch mal sorry, kleines Durcheinander
Hatte ich auch schon probiert, kommt letztlich aber das Gegenteil von dem heraus was rauskommen soll: Alle Datensätze aus Tabelle a wo der Wert in a.feld1 nicht in der Ergebnismenge von AndereProzedur() vorkommt. Bei einem Join (mit oder ohne Left) kommen aber genau die Datensätze, die nicht kommen sollen.

EDIT: Ich hänge heute irgendwie hinterher. Ihr wart immer schneller mit antworten Ich hab halt auch das Gefühl, Firebird ist in manchen Dingen anderen Datenbanken wie MariaDB usw. unterlegen. Bei MariaDB kann ich mit CREATE TEMPORARY TABLE ´PARKPLATZ´ FOR SELECT DISTINCT ... einen solchen Parkplatz bauen wie im Eingangspost angedacht. Bei Firebird ist das deutlich mehr Arbeit.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden

Geändert von Codehunter (21. Dez 2018 um 10:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.360 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 09:54
SQL-Code:
select a.* from tabelle a
join (select distinct 'idfrom andereprozedur(irgendeinparameter)) b on b.id = a.feld1
where p2.id is null
Funktioniert leider nicht so wie gedacht. Denn dann würden nur diejenigen Datensätze zurückgegeben, wo a.feld1 = NULL ist. Entpricht also funktional nicht
SELECT * FROM A WHERE NOT A.FELD1 IN (SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter));
Man beachte das NOT: ... WHERE **NOT** A.FELD1 IN (SELECT DISTINCT ... Ohne das ginge das mit einem Join aber so fällt mir da spontan keine Lösung ein.
Sorry, ich habe das gestern tatsächlich ohne dem NOT getestet.
Es geht zwar mit left join, aber die Anzahl der Reads hier deutlich größer.

Ich fürchte, bei NOT IN ... wird wohl eine zusätzliche Tabelle die besten Ergebnisse bringen.

Frank
Frank Reim
  Mit Zitat antworten Zitat
jobo

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

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"

  Alt 21. Dez 2018, 10:02
Ein gelockertes Join Kriterium muss ja meist mehr Read produzieren. Find ich erstmal kein k.o. Kriterium. Und dabei kommt es ja dann auf die Mengengerüste beider Seiten an. Gibt es viele auszuschließende Datensätze oder andersrum ..
Ob das codehunter taugt, kann er wohl nur selbst testen.
Gruß, Jo
  Mit Zitat antworten Zitat
Alt 21. Dez 2018, 09:06     Erstellt von Codehunter
Dieser Beitrag wurde von mkinzler gelöscht.
Antwort Antwort


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 13:17 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