SQL查询问题为多对多关系

时间:2017-11-18 12:08:16

标签: sql sql-server

我有以下表结构:

Sailor

sid    sname
-------------------
22     Dustin
29     Brutus
31     Luber 
32     John

Boat

bid    bname
-------------------
101    Pirate
102    Pirate
103    Marine

Reserve

bid   sid   day
------------------------------
101   22    10/10/98
102   22    10/10/98
103   22    10/8/98
103   31    10/7/98
102   29    9/8/98 
103   32    9/8/98

预期结果是:找到所有保留所有船只Pirate的船员的姓名。

基本上,我需要查询所有已保留名为Pirate的船名的水手姓名。

唯一的问题是,在表格船中,我有2列bname为Pirate,他们的出价不同。

知道如何通过查询实现它吗?

2 个答案:

答案 0 :(得分:0)

如果我理解正确您正在寻找加入操作:

SELECT S.* FROM Sailor S JOIN Res R ON S.sid = R.sid 
JOIN Boat B on R.bid = B.bid where B.bname = 'Pirate'

希望有所帮助

答案 1 :(得分:0)

顺便说一下,你的日期很模糊。请使用YYYY-MM-DD(或YYYYMMDD)格式。

无论如何,这是一种方式:

select b.bid,b.bname,s.sid,s.sname,r.day
  from Boat b join Reserve r on b.bid = r.bid
  join Sailor s on r.sid = s.sid
  where b.bname = 'Pirate';