2012-03-28 5 views
1

So kenne ich genug SQL nur um wirklich gefährlich zu sein (ich arbeite normalerweise nicht das Back-End), aber kann nicht die folgende Ansicht erstellt werden erfolgreich;) Die Ergebnismenge, nach der ich suche, ist ein Datensatz, dem Zeilen als Spaltenalias aus mehreren Tabellen zugewiesen sind (anstelle einer 1 x N-Ebene aller Spalten). Bei der Betrachtung der Haupttabelle gibt es eine Viele-zu-Eins-Beziehung, die auf Fremdschlüsseln basiert, die der Zeilen-ID der entsprechenden Tabelle zugeordnet sind.So erstellen Sie eine Ansicht, die eine 2x2 (oder NxN) Matrix der Ergebnisse zurückgibt

Im Idealfall würde ich einen Datensatz wie in der Rückkehr sieht wie folgt aus:

dataset.transaction_row[n]: col1, col2, col3, coln... (columns from the transaction table) 
dataset.category_row[n]: col1, co2, col3, coln... (columns from the category table) 

und so weiter ...

ich die folgende Fehlermeldung erhalten:

Query Error: near "AS": syntax error Unable to execute statement 

Von:

CREATE VIEW view_unreconciled_transactions 
AS SELECT account_transaction.* AS transaction_row, 
      category.* AS category_row, 
      memorized.name_rule_replace OR account_transaction.name AS payee 
FROM account_transaction 
LEFT JOIN memorized ON account_transaction.memorized_key = memorized.id 
LEFT JOIN category ON account_transaction.category_key = category.id 
WHERE status != 2 
ORDER BY account_transaction.dt_posted DESC 

I t scheint einfach genug, da der Selektor der Ergebnisspalte wiederholbar ist und Ausdrücke enthält (die Syntaxdiagramme von sqlite referenzieren). In Bezug auf den Fehler nehme ich an, dass es sich über den 2. "AS" beschwert, wo ich versuche, einen Tisch zu bekommen. * Als Alias ​​vergeben. Jede Hilfe in der richtigen Richtung wird geschätzt. Wenn ich müsste, könnte ich natürlich alle Spalten explizit angeben, aber das fühlt sich an wie ein Klecks.

Antwort

1

Der Modifikator AS kann nur auf eine einzelne Spalte angewendet werden, nicht auf eine Sammlung wie die von Ihnen verwendete. Sie müssen sie in bestimmte Namen ausbrechen, (was IMHO sowieso die beste Praxis ist)

Es sieht so aus, als ob Sie eine "Pivot-Tabelle" erstellen möchten. Sie können schwierig sein, in einer Datenbank zu machen. Ich kann sagen, dass wenn Sie ein Datenergebnis haben, wo jede Zeile aus einer anderen Tabellenquelle kommt und die Spalten jeder Tabelle IDENTISCH sind, dann könnten Sie versuchen, eine UNION-Anweisung zu verwenden, um die verschiedenen Ergebnisse zusammenzufügen, als wären sie nur ein Datensatz.

Beachten Sie, dass die Spalten alle ihre Benennung vom ersten Datensatz in einer UNION übernehmen und der Datentyp alle gleich sein muss.

+0

Danke für die Antwort. Für diese Ansicht gibt es mehrere FKs von "Metadaten", die zu der bestimmten fraglichen Zeile gehören würden, und mein ursprüngliches naives Denken war, dass ich in der Lage wäre, dies in eine einzige Auswahl zu überführen. Ich bin an groß genug Projekte gewöhnt, bei denen eine Mittelschicht verwendet wird, ich glaube, ich wurde von diesem Team verdorben, das die ganze Arbeit erledigt;) Ich bin noch nicht an diesen Teil meines Projekts gekommen, aber ich denke nach Dies wird am Ende eine sequenzierte Abfrage sein wie der Rest von dem, was ich mache. –

Verwandte Themen