So konvertieren Sie eine SQL-Unterabfrage in einen join

Ich habe zwei Tabellen mit einer 1:n-Beziehung: "content" und "versioniert-content-Daten" (zum Beispiel, einen Artikel entity-und alle erstellten Versionen des Artikels). Ich möchte eine Ansicht erstellen, zeigt die top-version der jeweiligen "Inhalt".

Derzeit verwende ich diese Abfrage (mit einer einfachen Unterabfrage):

WÄHLEN 
t1.id, 
t1.Titel, 
t1.contenttext, 
t1.fk_idothertable 
t1.version 
VON mytable wie t1 
WO (version = (SELECT MAX(version) ALS topversion 
FROM mytable 
WO (fk_idothertable = t1.fk_idothertable)))

Die Unterabfrage ist eigentlich eine Abfrage auf die gleiche Tabelle, die Extrakte den höchsten version eines bestimmten Elements. Beachten Sie, dass die versionierten Elemente haben die gleiche fk_idothertable.

In SQL Server ich habe versucht, zu erstellen eine indizierte Sicht dieser Abfrage, aber es scheint, ich bin nicht in der Lage seit Unterabfragen sind nicht zulässig, in indizierte sichten. So... hier ist meine Frage... Können Sie denken, ein Weg, um zu konvertieren, dass diese Abfrage eine Art Abfrage mit JOINs?

Scheint es, wie indizierte sichten können nicht enthalten:

  • Unterabfragen
  • common table expressions
  • abgeleitete Tabellen
  • HAVING-Klauseln

Ich bin verzweifelt. Alle anderen Ideen sind willkommen 🙂

Vielen Dank!

  • ist deine Unterabfrage korrekt? Ich sehe nur eine Tabelle, auf die verwiesen
  • Ja, ist eine Unterabfrage in der gleichen Tabelle, extrahiert die max-version eines Artikels, die Aktien der gleichen fk_idothertable
  • btw... fk_idothertable ist der Fremdschlüssel für die master Tabelle
  • Kann man einem erklären, auf diese, so dass wir sehen können, wo das eigentliche problem ist?
  • Lose verknüpfte: stackoverflow.com/questions/733660/...
InformationsquelleAutor sachaa | 2009-03-02
Schreibe einen Kommentar