Пусть говорят, у меня есть 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'
....
То, что вы ищете, это “присоединиться”, и для этого вам нужна “таблица соединений”, связывающая аббревиатуры состояний с самими состояниями.
Таблица соединений может быть таблицей с информацией о состоянии.
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, чем аббревиатуру. Быстрее сравнивать числа, чем строки, они гарантированно не меняются, а отношения документируются и применяются с помощью внешнего ключа.
Вам понадобится способ связать эти две таблицы вместе. Ваша нынешняя структура, такая как она, не будет работать.
/* 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
Надеюсь, это поможет.