SQLite Получить значение из другой таблицы

Вопрос:

Пусть говорят, у меня есть table1: abbr_state, thing1, thing2

А 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, он исходит из полного имени состояния вместо abbr?

Лучший ответ:

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

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'
      ....

Ответ №1

То, что вы ищете, это “присоединиться”, и для этого вам нужна “таблица соединений”, связывающая аббревиатуры состояний с самими состояниями.

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

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

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

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

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

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

Ответ №2

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

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

select state, thing3
from table2

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

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

Надеюсь, это поможет.

Оцените статью
TechArks.Ru
Добавить комментарий