展示每个学生可以去的所有餐厅,并至少有一家他们喜欢的甜点

  • 本文关键字:一家 喜欢 他们 餐厅 sql rows
  • 更新时间 :
  • 英文 :


这是我第一次在论坛上发布,因为我以前从未走过这条路线,试图确定我到底缺少什么。

这就是我要做的:编写一个SQL查询,以显示每个学生可以去的所有餐厅,并至少有一个他们喜欢的甜点。即,如果一家餐厅有这个人喜欢的甜点,那么该人可以去那家餐厅。这就是我到目前为止数据库(表,字段,复合表等)的所示:

create table Student
(
    StudentID int primary key not null
    , LastName nvarchar (20) not null
    , FirstName nvarchar (20) not null
)
create table Dessert 
(
    DessertID int primary key not null
    , DessertName nvarchar (25) not null
)
create table Restaurant 
(
    RestaurantID int primary key not null
    , RestaurantName nvarchar (20) not null
    , RestaurantStreet nvarchar (20) not null
    , RestaurantCity nvarchar (20) not null
    , RestaurantState nvarchar (2) not null
    , RestaurantZipCode nvarchar (5) not null
)
create table StudentDessert 
(
    StudentID int
    , DessertID int
    , primary key (StudentID, DessertID)
    , foreign key (StudentID) references Student(StudentID)
    , foreign key (DessertID) references Dessert(DessertID)
) 
create table RestaurantDessert 
(
    RestaurantID int
    , DessertID int
    , primary key (RestaurantID,DessertID)
    , foreign key (restaurantID)references Restaurant(RestaurantID)
    , foreign key (DessertID) references Dessert(DessertID)
)

这可能是我最接近的一个,但仍然产生太多数据:

select restaurantname, studentID, dessertid
from restaurant, studentdessert
where dessertid != 0 

您可以帮助完善此查询吗?

这确实取决于您希望结果的外观,但是这是一个简单的查询,可以使您朝正确的方向前进:

SELECT DISTINCT
        s.FirstName + ' ' + s.LastName AS 'StudentName'
        ,r.RestaurantName
FROM Student s
INNER JOIN StudentDessert sd ON sd.StudentID = s.StudentID
INNER JOIN dessert de ON de.DessertID = sd.DessertID
INNER JOIN RestaurantDessert rd ON rd.DessertID = sd.DessertID
INNER JOIN Restaurant r ON r.RestaurantID = rd.RestaurantID

最新更新