2016-05-18 4 views
0

Ich habe die folgende Situation: Es gibt 2 Tabellen in meiner SQLite-Datenbank, von denen eine "Assets" und die anderen "Operationen" genannt werden.Wie wählt man Elemente einer SQLite-Tabelle basierend auf einer Spalte mit einer bestimmten Eigenschaft aus, die sich in einer anderen Tabelle befindet?

"Assets" enthalten eine Liste der Marktwerte, von denen jeder einen spezifischen "Assettyp" -Wert hat, der seinen Namen hat.

"Operationen" haben viele Spalten, von denen eine "Asset" ist; Jede Operation wird mit einem einzigen Asset durchgeführt.

Jetzt habe ich eine Tabelle in meiner App Ich möchte mit "alle Vorgänge im Zusammenhang mit einem bestimmten Asset Typ", etwas, das schnell erledigt werden muss ausfüllen. Meine Frage ist: Wie kann ich das schnell und elegant machen?

Zwei Möglichkeiten habe ich jetzt, aber beide sind unzureichend: man fügt einfach eine neue Zeile namens "asset type" in die Operations-Tabelle ein, die die Suche recht einfach macht. Das Problem ist, dass dies alles andere als elegant ist, da es keine direkte Verbindung zwischen Operationen und Asset-Typen gibt. Eine andere Lösung wäre, zuerst eine Liste von Assets eines bestimmten Typs aufzurufen und dann in der "Operations" -Tabelle nur nach "Assets, die in dieser Liste enthalten sind" zu suchen. Aber dies wäre ein Verarbeitungsmonster, da es pro Typ Dutzende bis Hunderte von Assets geben könnte.

Gibt es eine andere Möglichkeit, die ich nicht herausfinden oder herausfinden könnte?

+1

Dies ist ein * genannt wird kommen *, und es ist mehr oder weniger der Grund RDBMSes wie SQLite wurde erfunden. –

+1

Bitte informieren Sie sich über Beitritt und Aktualisierung. Versuch es einmal. Wenn es nicht funktioniert, dann posten Sie, was Sie versucht haben und wir helfen Ihnen! – EoinS

+0

@EoinS danke und j_random auch. Ich habe mir * join * angeschaut, aber entweder waren die Beispiele nicht klar genug oder es macht nicht genau das, was ich brauche. Genauer gesagt möchte ich Tabellen in einer Abfrage nicht "verbinden". Ich möchte die Daten nur einer Tabelle auswählen, aber eine erweiterte Klausel mit Informationen einer anderen Tabelle verwenden. – Momergil

Antwort

1

machen Sie es einfach in der offensichtlichen Weise:

SELECT * 
FROM Operations 
WHERE AssetID IN (SELECT AssetID 
        FROM Assets 
        WHERE AssetType = ?); 

das gleiche mit einem getan werden könnte beitreten

SELECT Operations.* 
FROM Operations 
JOIN Assets USING (AssetID) 
WHERE AssetType = ?;