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 oberste Version jedes "Inhalts" anzeigt.
Zur Zeit verwende ich diese Abfrage (mit einer einfachen Unterabfrage):
%Vor%Die Unterabfrage ist eigentlich eine Abfrage an dieselbe 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 dieser Abfrage zu erstellen, aber es scheint, dass ich nicht in der Lage bin, da Unterabfragen in indizierten Sichten nicht zulässig sind. 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 so, als ob indizierte Sichten nicht enthalten können:
Ich bin verzweifelt. Andere Ideen sind willkommen: -)
Vielen Dank!
Dies wird wahrscheinlich nicht helfen, wenn die Tabelle bereits in Produktion ist, aber der richtige Weg, dies zu modellieren, besteht darin, Version = 0 die permanente Version zu machen und immer die Version des älteren Materials zu inkrementieren. Wenn Sie also eine neue Version einfügen, würden Sie sagen:
%Vor%Dann wäre diese Abfrage nur
%Vor%Keine Unterabfragen, keine MAX-Aggregation. Sie wissen immer, was die aktuelle Version ist. Sie müssen nie Max (Version) auswählen, um den neuen Datensatz einzufügen.
Sie können möglicherweise den MAX zu einem Tabellenalias machen, der nach Gruppe gruppiert ist.
Es sieht vielleicht so aus:
%Vor%Ich denke, FerranB war nah dran, hatte aber nicht das Gruppierungsrecht:
%Vor%M
So ... Ich nehme an, dass der 'mytable' in der Unterabfrage ein anderer tatsächlicher Tisch war ... also nannte ich ihn mytable2. Wenn es die gleiche Tabelle ist, dann wird das immer noch funktionieren, aber dann stelle ich mir vor, dass fk_idothertable nur 'id' ist.
%Vor%Hoffe, das hilft
Tags und Links sql sql-server join subquery