2017-02-03 3 views
1

Lassen Sie uns sagen, ich habe ein table1: abbr_state, thing1, thing2SQLite Get Wert von anderen Tisch

Und table2 mit: state, code (the index), thing3

So abbr_state = GA, während state = Georgia und code = GA.

Gibt es trotzdem kann ich eine SELECT tun, wo es:

SELECT abbr_state,thing1,thing2 FROM table1 ORDERY BY blah blah blah...

Aber machen es so, dass, wenn es abbr_state tut, ist es aus dem vollen Staatsnamen anstelle des abbr kommt?

+2

Das Wort, das Sie suchen, ist 'JOIN' – fvu

+0

Gibt es irgendwo in Ihrer Datenbank einen Lookup (nicht sicher, ob es in diesen beiden Tabellen enthalten ist), was bedeuten würde, dass GA Georgia ist? Wenn nicht, dann können Sie das leider nicht mit dem aktuellen Setup tun. –

+0

@DhruvSaxena ja!Es gibt eine Code-Spalte, die als Schlüssel dient, der mit abbr_state identisch ist. Wird updaten über – user1883614

Antwort

1

Die Abfrage, die verwendet werden könnte, ist:

SELECT abbr_state, state, thing1, thing2 
FROM table1 INNER JOIN table2 
    ON table1.abbr_state = table2.code 
ORDER BY blah; 

Sie alle WHERE Bedingungen vor der Klausel ORDER BY hinzufügen können, wenn die Notwendigkeit zu sein. Oder diese können auch in der JOIN Aussage geprügelt werden:

 .... 
     ON table1.abbr_state = table2.code 
     AND table1.fielda = 'xyz' 
     .... 
+0

Nevermind - herausgefunden es! Vielen Dank! – user1883614

1

Was Sie suchen, ist ein "join" und um es zu tun, benötigen Sie eine "Join-Tabelle", die die Zustandsabkürzungen mit den Zuständen selbst verbindet.

Die Join-Tabelle kann eine Tabelle mit Informationen zum Status sein.

create table states (
    id integer primary key, 
    name text unique, 
    abbreviation text unique, 
    capital text 
); 

Beachten Sie, dass ich erzwungen habe, dass Statusnamen und Abkürzungen eindeutig sein müssen. Dies stellt nicht nur sicher, dass niemand Alaska und Alabama versehentlich die gleiche Abkürzung gibt, sondern stellt auch eine index ein, um das Nachschlagen von Staaten mit Namen oder Abkürzung sehr schnell zu machen.

Dann würden Sie sie zusammen mit der Abkürzung verbinden.

select states.name 
from table1 
join states on table1.abbrev_state == states.abbreviation 
order by states.name 

Beachten Sie, dass, sobald Sie die Zustände Tisch haben, ist es sicherer und effizienter den Zustand ID in Tabelle 1 zu speichern als die Abkürzung. Es ist schneller, Zahlen als Strings zu vergleichen, es ist garantiert, dass sie sich nicht ändern, und die Beziehung wird mit einem foreign key dokumentiert und erzwungen.

1

Sie brauchen eine Möglichkeit, gemeinsam diese beiden Tabellen zu verknüpfen. Ihre derzeitige Struktur, wie sie ist, wird nicht funktionieren.

/* your example */  
select abbr_state, thing1, thing2 
from table1 

select state, thing3 
from table2 

Wie oben erwähnt, müssen Sie den Tabellen beitreten. Sie werden eine andere Spalte auf table2 hinzufügen müssen:

select state, thing3, fk_abbr_state 
from table2 

Dann können Sie diese auf der Abkürzung beitreten

select table2.state, table1.thing1, table1.thing2 
from table1 JOIN table2 ON table1.abbr_state = table2.fk_abbr_state 

Ich hoffe, das hilft.

Verwandte Themen