AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

IIF In Joinstatement

Ein Thema von Pro_RJ · begonnen am 18. Nov 2010 · letzter Beitrag vom 19. Nov 2010
Antwort Antwort
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#1

IIF In Joinstatement

  Alt 18. Nov 2010, 14:57
Datenbank: FireBird • Version: 2.0 • Zugriff über: IBX
Huhu,
ich hätte mal eine kleine Frage ob eine solche Funktion überhautp möglich ist.

Ich hab mel eine kleines Beispielstatement vorbereitet.
Das Ziel dieser Abfrage ist es, die Anzahl der Lesevorgänge zu reduzieren.

SQL-Code:
Select A.Zaehler, IIF(A.WGR <> 0,W.bezeichnung,Cast('Keine WGRas VarChar(10)))
from Artikel A
iif (A.WGR <> 0 ,left outer join warengruppen W on A.Mnr = W.Mnr and A.wgr = W.wgrnr and W.AdressNr = 0)
where .......

vielen Dank im Vorraus
Jens

Geändert von mkinzler (19. Nov 2010 um 12:08 Uhr) Grund: Delphi-Tag durch SQL-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: IIF In Joinstatement

  Alt 18. Nov 2010, 15:02
Wo soll genau der Unterschied zu einem INNER JOIN sein?
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
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#3

AW: IIF In Joinstatement

  Alt 18. Nov 2010, 15:45
Es geht mir nicht um das Join oder left outer join sondern darum, das join garnicht zu machen.
PS:
Ich möchte die Verbindung zu den Warengruppen nur lesen, wenn die WGR <> 0 ist sonst soll nichts gelesen werden
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: IIF In Joinstatement

  Alt 18. Nov 2010, 15:47
Ich will mich nicht zu weit aus dem Fenster lehnen, denke aber, dass das so nicht möglich ist. Wenn es jemand besser weiß, lasse ich mich gern belehren.

[edit] Wobei: in einer SP kann man sich das Statement ja zur Not auch selbst zusammenbasteln, vielleicht wäre das ein Ansatz. [/edit]
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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

AW: IIF In Joinstatement

  Alt 18. Nov 2010, 17:40
Diese Art der Optimierung halte ich für ziemlich unglücklich.

Wieviel würde das denn einsparen?
Es spart einen "Index-Lookup" auf den Index der Tabelle "warengruppen".
Index-Strukturen werden bevorzugt im Speicher gehalten; die mögliche Ersparnis liegt im Millisekunden Bereich.
Ausserdem würde der Interpreter, der das SQL auf interne Anweisungen umsetzt, mehr Zeit benötigen. Gespart wird also so gut wie nichts.

Was würde man verlieren?
Die Query wird durch die Optimierung so "verhunzt", dass ein fremder Programmierer den Sinn und Zweck erstmal nicht verstehen würde.
Falls er dann kapiert hat, dass es nur um Optimierung geht, würde er seinen Kopf gegen den Monitor
Andreas
  Mit Zitat antworten Zitat
Pro_RJ

Registriert seit: 16. Apr 2008
146 Beiträge
 
#6

AW: IIF In Joinstatement

  Alt 19. Nov 2010, 10:09
Es geht darum, ich habe eine View die eine SP aufruft die Entweder Daten neu berechnet oder aus einer Gespeicherten liste zulinkt.
die Sp gibt mir 12 Feldinformationen wieder zurück.
da ich in einer View eine SP nur per (Select XXX from YYY()) aufrufen kann wurde ich das gerne abkürzen.
bsp:


SQL-Code:
Create View Artikel
Select ArtikelNr,
Bez,
(Select LagerBestand from SP(A.PIX)),
(Select Lagerwert from SP(A.PIX)),
(Select Bestellt from SP(A.PIX)),
(Select Bestelltwert from SP(A.PIX)),
.....
from Artikel
in der SP wird entschieden,
1. Wenn der Artikel Bearbeitet wurde -->
JA --> Dann Lagerwerte neu Berechnen
Nein --> sonst letzte gespeicherten Lagerwerte anzeigen (hiert wird eine weitere Tabelle gelesen)

und jetzt wollte ich die SP so umbauen, dann wenn nur die letzten werte geladen werden sollen dann per

SQL-Code:
Create View Artikel
Select ArtikelNr,
Bez,
iif(LetzteDatenanzeigen = 1, L.Lagerbestand,(Select LagerBestand from SP(A.PIX)))
iif(LetzteDatenanzeigen = 1, L.LagerWert,(Select LagerBestand from SP(A.PIX)))
iif(LetzteDatenanzeigen = 1, L.Bestellt,(Select LagerBestand from SP(A.PIX)))
iif(LetzteDatenanzeigen = 1, L.Bestellwert,(Select LagerBestand from SP(A.PIX)))
.....
from Artikel
iif(LetzteDatenanzeigen = 1, Left outer join Lageranzeige))
Über dieses Konstrukt würde ich statt 12 mal 2 Lesevorgänge nur einen lesevorgang benötigen
--> Das Ganze auf 400.000 - 500.000 Daten gibt das schon einiges anzeitersparniss

Geändert von mkinzler (19. Nov 2010 um 12:08 Uhr) Grund: Delphi-Tags durch SQL-Tags ersetzt
  Mit Zitat antworten Zitat
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:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz