首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用IF条件连接5个表

如何使用IF条件连接5个表
EN

Stack Overflow用户
提问于 2015-02-04 11:12:44
回答 2查看 106关注 0票数 2

我想通过book_id连接5个表。我试过:

代码语言:javascript
复制
 SELECT booked_room_info . * , booking_info . * , hotel_info.name as
 hotelname,hotel_info.address as hoteladdress,hotel_info.contact as
 hotelcontact , personal_info . *,room_registration.room_name as
 roomname,room_registration.price as roomprice,room_registration.price as
 roomprice,room_registration.description as
 roomdescription,room_registration.image as roomimage
    FROM booked_room_info
    JOIN booking_info ON booking_info.booking_id = booked_room_info.booking_id
    JOIN hotel_info ON hotel_info.id = booking_info.hotel_id
    JOIN personal_info ON personal_info.booking_id = booked_room_info.booking_id
    JOIN room_registration ON room_registration.hotel_id = booking_info.hotel_id
    WHERE booked_room_info.booking_id= 1

但是如果我在booking_id =1上有2个预订,但是它得到了10个结果。我想我应该做个假设条件。如果(booked.room_type && book_info.hotel_id)是相同的,那么只能从room_registration中获取行,但是我如何才能理解它。

代码语言:javascript
复制
booked_room_info
------
id | booking_id | room_type | check_in | check_out
1  |  1         | delux     | 2015/1/2 | 2015/1/5
booking_info
---------
id | booking_id | hotel_id | user_id 
 1 |  1         |  2       |  1 

hotel_info
----------
id |   name    | address | user_id
 2 |palm hotel | newyork | 1

personal_info 
-------------
id  |full_name    | address | nationality | booking_id
 1  | sushil stha | new york | smth       |  1

room_registration
-----------------
id | room_name | price | image   | hotel_id  | user_id
 1 |  delux    | 1000  |room.jpg |  2        |  1
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-04 15:07:53

上一个联接中有一个错误:

代码语言:javascript
复制
JOIN room_registration ON room_registration.hotel_id = booking_info.hotel_id

您正在使用hotel_id列连接这些表。room_registration表中可能有5行带有hotel_id=2。因此,在加入之后,您将接收2*5=10行,而不是预期的2。

所以你应该以不同的方式加入这张桌子。

如果您想从room_registration表中用精确的一行连接每一行,那么您必须指定更精确的联接条件。

要正确地加入room_registration表,可以将room_registration_id列添加到booking_info表中。然后,您可以使用以下方法加入:

代码语言:javascript
复制
JOIN room_registration ON room_registration.id = booking_info.room_registration_id
票数 1
EN

Stack Overflow用户

发布于 2015-02-04 11:43:47

使用INNER JOIN,删除重复字段。

代码语言:javascript
复制
SELECT 
bri.*, 
bi.*, 
hi.name AS hotelname, hi.address as hoteladdress, hi.contact AS hotelcontact, 
pi.*, 
rr.room_name AS roomname, rr.price AS roomprice, rr.description AS roomdescription, rr.image AS roomimage
FROM booked_room_info bri
INNER JOIN booking_info bi ON bri.booking_id = bi.booking_id
INNER JOIN hotel_info hi ON bi.hotel_id  = hi.id
INNER JOIN personal_info pi ON bri.booking_id = pi.booking_id
INNER JOIN room_registration rr ON bi.hotel_id = rr.hotel_id
WHERE bri.booking_id = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28319932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档