我想创建两个链接的表。我的问题是这个设计是否有效,我的加入声明是否有效。
表#1宴会厅 ID(PK), 名称, 地点, 等表#2预订 ID(PK), Banquet_hall_id(FK) 天保留, 等
如果我想将预订值和酒店值放在一起,那么下面的SQL会有效吗?
select from reservation where id = 1 inner join on banquet_hall_id = banquenthall.id
我希望这会从宴会厅(名称,地点等)中选择价值,并从预订中选择价值,例如预订天数等。
答案 0 :(得分:0)
是的,设计看起来是正确的,因为大厅和预订之间会有1..*
关系,但您的查询有点颠倒。它应该看起来像
select r.*, h.name, h.location
from reservation r
join hall h
on r.banquet_hall_id = h.id
where h.id = 1;
答案 1 :(得分:0)
加入两个表时,请记住一个通常是父(您正在链接主键的那个),另一个是孩子(一个是外键)。
带有JOIN
子句的SQL语句采用以下模式:
select *
from child inner join parent on child.fk = parent.pk
其中fk
是外键,pk
是主键。
由于JOIN
和=
都是对称的,因此您可以按任意方式编写它们。例如:
select *
from parent inner join child on child.fk = parent.pk
在您的情况下,这会导致:
select *
from reservation inner join banquethall on banquet_hall_id = banquenthall.id
(我假设你的表格banquet hall
真的是banquethall
:否则你需要加上引号:"banquet hall"
)。
WHERE
子句始终跟在表格表达式之后。在你的情况下:
select *
from reservation inner join banquethall on banquet_hall_id = banquenthall.id
where reservation.id=1;
-- where banquethall.id=1;
由于您正在连接具有重复列名称(id
)的表,因此您必须限定不明确的列名。