2017-02-03 1 views
1

Скажем, у меня есть table1: abbr_state, thing1, thing2SQLite Получить значение из другой таблицы

И table2 с: state, code (the index), thing3

Так abbr_state = GA, в то время как state = Georgia и code = GA.

Есть в любом случае я могу сделать SELECT где это:

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

Но сделать так, чтобы, когда он делает abbr_state, это происходит от полного государственного имени вместо сокр?

+2

Слово, которое вы ищете, является 'JOIN' – fvu

+0

Есть ли поиск в любой точке вашей базы данных (не уверен, что он содержится в этих двух таблицах), который предположил бы, что« GA - это действительно Грузия »? Если нет, то, к сожалению, с текущей настройкой вы не сможете. –

+0

@DhruvSaxena да!Существует столбец кода, который действует как ключ, который является таким же, как abbr_state. Будет обновление выше – user1883614

ответ

1

Запрос, который может быть использован, является:

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

Вы можете добавить любые условия WHERE до пункта ORDER BY, если это будет необходимо. Или те, может даже избить в JOIN заявлении:

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

Nevermind - понял! Благодаря! – user1883614

1

Что вы ищете, это "join", и для этого вам нужна «таблица объединения», связывающая аббревиатуры состояния с самими состояниями.

Таблица соединений может быть таблицей с информацией о состоянии.

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

Обратите внимание, что я использовал эти названия и сокращения, которые должны быть уникальными. Это не только гарантирует, что никто случайно не дает Аляске и Алабаме ту же аббревиатуру, но также устанавливает index, чтобы сделать поиск состояний по имени или аббревиатуре очень быстро.

Затем вы присоединились к ним вместе, используя аббревиатуру.

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

Обратите внимание, что когда у вас есть таблица состояний, безопаснее и эффективнее хранить государственную ID в table1, чем аббревиатуры. Быстрее сравнивать числа, чем строки, это гарантированно не изменится, и отношения документируются и соблюдаются с foreign key.

1

Вам нужен способ, чтобы связать эти две таблицы вместе. Ваша нынешняя структура, такая как она, не будет работать.

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

select state, thing3 
from table2 

Как уже упоминалось выше, вам необходимо присоединиться к таблицам. Вам нужно будет добавить еще один столбец на table2:

select state, thing3, fk_abbr_state 
from table2 

Затем вы можете присоединиться к ним на аббревиатуру

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

Я надеюсь, что это помогает.