假设我有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?
答案 0 :(得分: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
请注意,一旦拥有states表,在table1中存储状态ID比使用缩写更安全,更有效。比较字符串比字符串更快,保证不会改变,并且记录关系并使用foreign key强制执行。
答案 1 :(得分: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'
....
答案 2 :(得分: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
我希望这会有所帮助。