Thema: Delphi [SQL] JOIN joint zu oft

Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: [SQL] JOIN joint zu oft

  Alt 14. Jan 2010, 14:26
Zitat von mkinzler:
Oder ein Join auf einen View über die Summen oder eine derived table
Uhlala, Neuland für den kleinen Medium . Müsst ich erstmal eine kleine Lern-Session für einlegen.

@p80286: Völlig richtig, die 3 Angaben bilden den Index. Übrigens: Die Chargennummer ist nicht eine frei vergebene, sondern ein Produktionsauftrag kann für N Chargen gestartet werden. Für jede Charge wird dann ein neuer Kopf+Positionen eingetragen, und die Chargennummer ist dann fortlaufend. Da das Vorgabedatum aber für jeden Chargenstart, nicht für den ersten tatsächlichen Auftragsstart eingetragen wird, ist das Feld für eine Eindeutigkeitsbeziehung eigentlich überflüssig.
Anfügen von "AND p.Charge = k.Charge" im JOIN bewirkt daher auch leider keine Änderung

Wenn ich irgendwie 2 Schritte machen könnte, wäre das ganze vergleichsweise einfach. Ein Subselect wäre z.B. genial, dann wär's ein Kinderspiel. Ich fürchte ich muss mich tatsächlich in Views einlesen. Wobei ich immernoch der Meinung bin, dass das eigentlich alles in einem Statement möglich sein müsste. So rein instinktiv


Edit
Ich bin ja schon ein Trottel. MySQL 4.1 kennt Subselects! Aber... leider sind die keine Lösung
Folgendes Statement bringt das richtige Ergebnis:
SQL-Code:
SELECT
  k.REZ_NAME AS REZ_NAME,
  k.KOMMENT AS TEXT,
  (SELECT COUNT(Rez_Name) FROM rkohis WHERE Rez_Nr = 1)*1.0 AS Anz,
  ROUND(SUM(p.ANTEIL_I))*1.0 AS Menge
FROM
  rpohis p JOIN rkohis k ON p.REZ_NR = k.REZ_NR AND p.V_Dat = k.V_Dat AND k.Charge = p.Charge
WHERE
  p.Rez_Nr = 1
GROUP BY
  k.REZ_NAME
ORDER BY
  k.REZ_NAME
Aber! Die WHERE-Clause im äusseren Statement ist nicht immer nur so simpel. Der Anwender kann wählen welche Rezepte alle genommen werden sollen, so dass es auch mal heissen kann: "WHERE p.Rez_Nr = 1 OR p.Rez_Nr = 8 OR p.Rez_Nr = 21 OR ... OR ..."
Das ist mit dem Subselect dann schon wieder nicht mehr so einfach vereinbar fürchte ich
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat