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