2016-09-07 3 views
-1

Ich habe einige Abfragen in MS Access modelliert, damit sie zeigen, was ich will und wie ich sie will, bevor ich sie in meine Android App übersetze.Abfrage einer Abfrage in SQLite/Android

Meine Ergebnisse erfordern jedoch zwei Abfragen, um die endgültigen Ergebnisse zu erhalten - eine Abfrage, um eine Reihe von Joins durchzuführen, und dann eine zweite Abfrage, die die erste Abfrage mit einigen zusätzlichen Tabellen verbindet. Wenn ich sie kombinieren könnte, hätte ich keinen Weg gesehen.

Wie auch immer, gibt es eine Möglichkeit in SQLite, die es mir ermöglicht, dies effizient zu tun?

EDIT: Beispiel:

Customers Table: ID, CustName 
Orders Table: ID, CustID, ItemID 
Items Table: ID, ItemName 

Query1: SELECT Orders.ID AS OrderID, Orders.CustID, Orders.ItemID, Customers.CustName 
FROM Orders LEFT JOIN Customers ON Orders.CustID = Customers.ID; 

Query2: SELECT Query1.OrderID, Query1.CustID, Query1.ItemID, Query1.CustName, Items.ItemName 
FROM Query1 LEFT JOIN Items ON Query1.ItemID = Items.ID; 

ich in diesem Fall wissen Sie leicht, diese beiden kombinieren, aber wir so tun, als sie komplex genug waren, so hatte man sie getrennt zu halten. Ich möchte einen Weg, um die Ergebnisse von Query2 in meiner Android-App (die SQLite verwendet) zu bekommen.

+1

... jemals von 'Views' gehört? –

+0

Davon gehört, aber nicht, was sie sind oder wie sie hier verwendet werden können. –

+0

Können Sie ein Beispiel für die Abfragen angeben, die Sie benötigen? Oder erklären Sie zumindest das Tabellenschema und welche Daten möchten Sie aus der Datenbank? –

Antwort

-1

Jede Abfrage, unabhängig davon, wie komplex es ist, kann als eine Unterabfrage in einer anderen Abfrage FROM-Klausel verwendet werden:

SELECT ... FROM (SELECT ...) AS Query1 JOIN ...; 

Wie dem auch sei, klingt genau CREATE VIEW wie das, was Sie wollen:

Der Befehl CREATE VIEW weist einer vorgefertigten SELECT-Anweisung einen Namen zu. Sobald die Ansicht erstellt wurde, kann sie in der FROM-Klausel eines anderen SELECT anstelle eines Tabellennamens verwendet werden.

CREATE VIEW Query1 AS 
SELECT Orders.ID AS OrderID, 
     Orders.CustID, 
     Orders.ItemID, 
     Customers.CustName 
FROM Orders 
LEFT JOIN Customers ON Orders.CustID = Customers.ID; 
+0

Wie würde ich dies im Kontext von Java/Android/SQLiteOpenHelper tun? –

+0

Indem Sie diese Anweisung genau so ausführen, wie Sie irgendeine andere Anweisung ausführen würden. –

+0

Also würde ich 'db.rawQuery (" CREATE VIEW Query1 AS (SELECT Aufträge.ID AS OrderID, Orders.CustID, Orders.ItemID, Customers.CustName FROM Bestellungen LEFT JOIN Kunden ON Orders.CustID = Customers.ID); ");' und dann 'db.rawQuery (" SELECT Query1.OrderID, Query1.CustID, Query1.ItemID, Query1.CustName, Items.ItemName FROM Query1 LEFT JOIN Elemente ON Query1.ItemID = Items.ID; ");'? –