Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken" (https://www.delphipraxis.net/199039-ergebnis-einer-storedproc-innerhalb-anderer-storedproc-zwischenparken.html)

Codehunter 21. Dez 2018 07:24

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von dataspider (Beitrag 1421433)
SQL-Code:
select a.* from tabelle a
join (select distinct 'id' from 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?

dataspider 21. Dez 2018 08:22

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von Codehunter (Beitrag 1421601)
Zitat:

Zitat von dataspider (Beitrag 1421433)
SQL-Code:
select a.* from tabelle a
join (select distinct 'id' from 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

Codehunter 21. Dez 2018 08:51

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von dataspider (Beitrag 1421433)
SQL-Code:
select a.* from tabelle a
join (select distinct 'id' from 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
Zitat:

Zitat von Codehunter (Beitrag 1421387)
SQL-Code:
SELECT * FROM A WHERE NOT A.FELD1 IN (SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter));

Man beachte das NOT:
SQL-Code:
... 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.

jobo 21. Dez 2018 08:55

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Aber da fehlt doch dann nur das "left" vorm "join"

noch mal sorry, kleines Durcheinander

dataspider 21. Dez 2018 09:54

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von Codehunter (Beitrag 1421612)
Zitat:

Zitat von dataspider (Beitrag 1421433)
SQL-Code:
select a.* from tabelle a
join (select distinct 'id' from 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
Zitat:

Zitat von Codehunter (Beitrag 1421387)
SQL-Code:
SELECT * FROM A WHERE NOT A.FELD1 IN (SELECT DISTINCT ´ID´ FROM AndereProzedur(IrgendeinParameter));

Man beachte das NOT:
SQL-Code:
... 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

jobo 21. Dez 2018 10:02

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
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.

Codehunter 21. Dez 2018 10:03

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von jobo (Beitrag 1421613)
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
SQL-Code:
CREATE TEMPORARY TABLE ´PARKPLATZ´ FOR SELECT DISTINCT ...
einen solchen Parkplatz bauen wie im Eingangspost angedacht. Bei Firebird ist das deutlich mehr Arbeit.

jobo 21. Dez 2018 10:13

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von Codehunter (Beitrag 1421623)
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.

Das dürfte aber keine Frage von mit oder ohne LEFT sein, sonder jedenfalls ein OUTER join und da dann eine Frage von LEFT oder RIGHT mit dem passenden IS NULL.

Ich bin gerade schon mit den Statements (Vorlage von Dir und Anpassung von dataspider) durcheinander gekommen. Das müsste bei Dir doch schnell erledigt sein, dass Du das Gegenteil von dem was du jetzt bekommst. (Hätte ich in der Grundschule bloß besser aufgepasst)

jobo 21. Dez 2018 10:15

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von Codehunter (Beitrag 1421623)
..Ihr wart immer schneller mit antworten :-)

Das müsstest Du doch kennen von diesem Forum!
Es fehlt nur noch ein winziges Stück und die Antworten kommen vor dem Eröffnungspost.

Codehunter 21. Dez 2018 10:24

AW: Ergebnis einer StoredProc innerhalb anderer StoredProc "zwischenparken"
 
Zitat:

Zitat von jobo (Beitrag 1421626)
Zitat:

Zitat von Codehunter (Beitrag 1421623)
..Ihr wart immer schneller mit antworten :-)

Das müsstest Du doch kennen von diesem Forum!

In der Tat wundere ich mich öfters wie schnell einem hier geholfen wird. Manchmal verbunden mit dem schlechten Gewissen, mehr zu bekommen als man zurückgeben kann. Aber hilft einem ja auch schon das nachlesen in solchen Diskussionen, sodass es später trotzdem für andere hilfreich sein kann.

Zitat:

Zitat von jobo (Beitrag 1421626)
Es fehlt nur noch ein winziges Stück und die Antworten kommen vor dem Eröffnungspost.

Dazu müsste man wohl das Template von Blau auf Rot umstellen und einen Sound abspielen der "Ho Ho Ho" sagt ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.
Seite 2 von 3     12 3      

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