我开始学习数据库,外键有问题。
我有两张桌子:
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,
)

餐桌电影看起来像:
雷神蓝光2012 1
Avangers 2蓝光2014 2
大都灵DVD 2008 1
泰坦尼克DVD 1998 2
表可用性如下:
一。可用
2.不可用的
当我打这个:
SELECT movies.id_n,movies.name,availability.availability
FROM movies
full outer join availability on movies.id_n = availability.id_a;

可用性仅出现在前两列中:
雷神可用
Avangers 2不可用
都灵大酒店
泰坦尼克DVD
你能帮我怎样在我的数据库里找到下一部电影吗?

最佳答案

干得好:

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 *相当于“选择所有列”

关于sql - Postgres:外键不匹配所有行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30226099/

10-12 05:35