Ich habe zwei Tabellen mit einer 1: n-Beziehung: "content" und "versioned-content-data" (z. B. eine Artikelentität und alle Versionen dieses Artikels) . Ich möchte eine Ansicht erstellen, die die Top-Version jedes "Inhalts" anzeigt.So konvertieren Sie eine SQL-Unterabfrage in einen Join
Derzeit verwende ich diese Abfrage (mit einer einfachen Unterabfrage):
SELECT t1.id, t1.title, t1.contenttext, t1.fk_idothertable t1.version FROM mytable as t1 WHERE (version = (SELECT MAX(version) AS topversion FROM mytable WHERE (fk_idothertable = t1.fk_idothertable)))
Die Unterabfrage ist eigentlich eine Abfrage an die gleiche Tabelle, die die höchste Version eines bestimmten Elements extrahiert. Beachten Sie, dass die versionierten Elemente dasselbe fk_idothertable haben.
In SQL Server habe ich versucht, eine indizierte Sicht diese Abfrage zu erstellen, aber es scheint, dass ich nicht in der Lage bin, da Unterabfragen sind in indizierten Sichten nicht erlaubt. Also ... hier ist meine Frage ... Können Sie sich eine Möglichkeit vorstellen, diese Abfrage in eine Art Abfrage mit JOINs zu konvertieren?
Es scheint, wie indizierte Sichten nicht enthalten:
- Subqueries
- allgemeine Tabellenausdrücke
- abgeleitete Tabellen
- HAVING-Klauseln
Ich bin verzweifelt. Alle anderen Ideen sind willkommen :-)
Vielen Dank!
ist Ihre Unterabfrage korrekt? Ich sehe nur eine Tabelle referenziert –
Ja, ist eine Unterabfrage zu der gleichen Tabelle, die die maximale Version eines Elements extrahiert, die die gleiche fk_idothertable – sachaa
btw ... fk_idothertable ist der Fremdschlüssel der Master-Tabelle – sachaa