Postgres:外键不匹配所有行

时间:2015-05-13 22:13:57

标签: sql database postgresql

我开始学习数据库,而且我的外键有问题。

我有两张桌子:

1)带电影的表

create table movies (
    id_m  serial primary key,
    name varchar (20) NOT NULL,
    type varchar(20) NOT NULL,
    year smallint NOT NULL,
    availability smallint references availability(id_a) NOT NULL
)

2)具有可用性的表

create table availability(
    id_a serial primary key,
    availability (varchar 20) NOT NULL,
)

表格电影如下:

  1. Thor Blu-Ray 2012 1
  2. Avangers 2 Blu-ray 2014 2
  3. Gran Torino DVD 2008 1
  4. 泰坦尼克号DVD 1998 2
  5. 表可用性如下:  1.可用  2.不可用

    当我输入时:

    SELECT movies.id_n,movies.name,availability.availability 
    FROM movies 
    full outer join availability on movies.id_n = availability.id_a;
    

    可用性仅出现在前两列:

    1. Thor可用
    2. Avangers 2 Unavailable
    3. Gran Torino
    4. 泰坦尼克号DVD
    5. 你能帮我解决一下如何获得我数据库中下一部电影的可用性吗?

1 个答案:

答案 0 :(得分:1)

你走了:

SELECT * FROM movies 
join availability on movies.availability = availability.id_a;

更多细节: 你加入了pks(movies.id_n = availability.id_a),在大多数情况下,连接在fk关系中是有意义的(movies.availability = availability.id_a)。这是你错过的。其他项目只是清理。

我删除了不需要的full outer子句。有关联接类型的更好理解,请参阅http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

最后select *相当于“选择所有列”