SQL-Abfrage für Multiplikation

8

Ich habe zwei Beziehungen (Tabellen in der SQL-Datenbank) mit reinen Zahlen. Diese beiden Beziehungen sind als Matrizen vorzustellen.

Die Frage ist, eine SQL-Abfrage zu schreiben, um dort zwei Relationen wie bei der normalen Matrixmultiplikation zu multiplizieren.

Ich habe mir dafür den Kopf zerbrochen .... Aber nutzlos: O

Kann mir bitte jemand helfen ?????

Tabellennummer 1:

@ Aaron Bertrand:

Ich verwende SQL Server 2008 R2 Die Screenshots der Tabellen sind:

Tabelle 1:

Tabelle 2:

Ich habe die Abfrage verwendet:

%Vor%

Die Antwort:

Dieser Weg ist ziemlich einfach und nicht mein ursprünglicher Matrix-Weg, wie von @Marcelo Cantos und @ypercube vorgeschlagen ...

    
killerCoder 05.07.2011, 11:51
quelle

2 Antworten

14

Nehmen wir die folgende Struktur an:

%Vor%

Sie können dies schreiben:

%Vor%

BEARBEITEN: Die Verwendung des tabellarischen Layouts der Tabelle zur Nachahmung einer Matrixstruktur erschwert dieses Problem aus mindestens zwei Gründen:

  1. Sie können nicht symmetrisch mit Zeilen und Spalten umgehen.
  2. Sie können nicht portabel auf die Zeile verweisen, aus der ein Element stammt.

Am besten wäre es, jeder Tabelle eine Zeilennummernspalte hinzuzufügen ...

%Vor%

... dann synthetisiere die Struktur, die ich oben als Sicht auf jeden Tisch vorgeschlagen habe ...

%Vor%

... und schließlich die obige SQL verwenden, um die Antwort zu bewerten. Bei Bedarf könnten Sie eine andere Ansicht schreiben, die das Ergebnis in eine tabellarische Struktur zurückübersetzt.

Offen gesagt, halte ich das alles für sehr fehlgeleitet. Sie werden feststellen, dass die Dinge viel besser mit einer Zeilen- / Spalten- / Wertstruktur (und logisch kohärenter) funktionieren als eine A / B / C / ... -Struktur. Stellen Sie sich zum Beispiel vor, wie einfach Sie die Transponierung einer Matrix mit row / col / value berechnen können:

%Vor%

oder Summe der Diagonale:

%Vor%

und fragen Sie sich, wie einfach diese Ihre Struktur verwenden würden.

PS: Beim Thema logische Kohärenz sind Ihre Tabellen keine Beziehungen im eigentlichen Sinn des Wortes, da sie eine Reihenfolge in den Zeilen definieren und notwendigerweise doppelte Zeilen zulassen müssen, die in einer Relation keinen Sinn ergeben , die (lose) als eine Menge von Tupeln definiert ist. Diese Verschmelzung von n-dimensionalen Beziehungen mit zweidimensionalen Tabellen ist das Herzstück vieler Dinge, die heutzutage schlecht mit der Datenverwaltung zusammenhängen.

    
Marcelo Cantos 05.07.2011, 12:01
quelle
3

Ich nehme an, dass beide Tabellen (i, j, dataij) Spalten

haben

wobei i bedeutet row und j bedeutet column :

%Vor%

Mit dieser Datenstruktur sind Operationen zwischen Matrizen wie Multiplikation einfacher. Schwieriger ist es, die Tabellen im üblichen Matrixformat anzuzeigen. Eine Möglichkeit besteht darin, etwas Ähnliches zu verwenden (prüfen Sie auf PIVOT, wenn Sie eine Version von SQL-Server haben, die dies für andere Möglichkeiten unterstützt):

%Vor%     
ypercubeᵀᴹ 05.07.2011 12:04
quelle

Tags und Links