2013-05-02 40 views
0

我有5个表,我需要查询,我不确定如何做到这一点。我正在考虑使用多个内部连接,但是我得到了很多错误。内部加入超过2个表

这里是我想要做的一个例子:

表:

Customer 
ID Name  State hotelID 
1 George W.A 1 
2 Franklin N.S.W 2 

Bus 
ID Make 
1 Hino 
2 Mercedes 
3 Leyland 

Hotel 
ID Name 
1 Hyatt 
2 Sebel 

Tour 
ID tourName busID 
1 Japan 1 
2 America 1 
3 Austria 2 


tour-CustLink 
ID tourID custID 
1 1  1 
2 2  2 
3 3  3 

比方说,查询到邮件列表的名字,谁住在凯悦接着日野客车的客户状态,我会如何去做这件事?

这些表格并不是我正在使用的,我只是喜欢它在这样的例子中,并且有很多代码可以添加。

+0

考虑为我们提供友好的DDL或sqlfiddle。这就是说,这是简单的。 – Strawberry 2013-05-02 16:47:21

+3

这是需求声明(“我有5个需要查询的表”)。缺少的是实际做到的任何努力。 – 2013-05-02 16:50:10

回答

3

事情是这样的......

SELECT c.Name, c.State 
FROM tourCustLink AS tcl 
INNER JOIN Customer AS c ON tcl.custID = c.ID 
INNER JOIN Hotel AS h on c.hotelID = h.ID 
INNER JOIN Tour AS t on tcl.tourID = t.ID 
INNER JOIN Bus AS b on t.busID = b.ID 
WHERE h.Name = 'Hyatt' 
AND b.Make = 'Hino' 

但要注意,这是不是最优的......有点为时过早真的... 8-)

+0

Thankyou,它似乎尴尬添加像5个连接,我被抛出这么多的错误.. – ReallyGoodPie 2013-05-02 16:59:42

0

只要继续JOIN荷兰国际集团他们...

根据您的数据,这可能会出现重复,例如,如果客户住在多家酒店或进行多次导游,您可能需要重新构造它,或在SELECT之后添加DISTINCT子句。

SELECT 
    c.[name] 
    ,c.[state] 
FROM 
    Customer AS c 
JOIN 
    Hotel AS h 
     ON h.[ID] = c.[hotelID] 
JOIN 
    tour-CustLink AS tcl 
     ON tcl.[CustID] = c.[ID] 
JOIN 
    Tour AS t 
     ON t.[ID] = tcl.[tourID] 
JOIN 
    Bus AS b 
     ON b.[ID] = t.[BusID] 
WHERE 
    b.[Make] = 'Hino' 
    AND h.[name] = 'Hyatt'