2016-04-03 19 views
0

我有3张桌子。这些表是这样的:如何在同一主键上连接3个表?

表酒店

id(pk) 
hotel_code 
hotel_name 
hotel_address 

表hotel_description

id(pk) 
hotel_id(fk from table hotel) 
hotel_title 
hotel_description 

表hotel_image

id(pk) 
hotel_id(fk from table hotel) 
image_title 
image_description 

我查询加入3表是这样的:

SELECT a.hotel_code, a.hotel_name, a.address, b.hotel_title, b.hotel_description, c.image_title, c.image_url 
FROM hotel a 
JOIN hotel_description b ON a.id = b.hotel_id 
JOIN hotel_image c ON a.id = c.hotel_id 
WHERE a.hotel_code = 'IDJKT_00001' 

上面运行查询的结果是这样的: http://snag.gy/nw541.jpg

它看起来双倍数据

如何解决我的问题?

谢谢

+0

您的预期数据格式是什么? –

+0

我不确定,我认为'b'和'c'之间缺少某些东西,请尝试将此添加到'where子句'AND b.hotel_id = c.hotel_id'? – Yazan

+0

@Yazan,'SELECT a.hotel_code,a.hotel_name,b.hotel_title,b.hotel_description,c.image_title,c.image_url 从酒店a JOIN hotel_description b ON a.id = b.hotel_id JOIN hotel_image c ON a.id = c.hotel_id WHERE a.hotel_code ='IDJKT_00001'和b.hotel_id = c.hotel_id'。像那样?结果是一样的 –

回答

0

不存在重复的数据,你必须为你的酒店多的描述,你必须为你的酒店多张图片,你就必须在3个单独的查询请求这些,如果你不把它们希望不止一次出现:

SELECT a.hotel_code, a.hotel_name, a.address 
FROM hotel a 
WHERE a.hotel_code = 'IDJKT_00001' 

SELECT b.hotel_title, b.hotel_description 
FROM hotel a 
JOIN hotel_description b ON a.id = b.hotel_id 
WHERE a.hotel_code = 'IDJKT_00001' 

SELECT c.image_title, c.image_url 
FROM hotel a 
JOIN hotel_image c ON a.id = c.hotel_id 
WHERE a.hotel_code = 'IDJKT_00001' 

目前你有一个酒店,你加入这家酒店的说明表。描述表中有7行,因此此时您将有7行。然后,您将这7行与图像表结合在一起,您至少可以从图像上看到4个图像。这意味着你将得到7 * 4 = 28行。

+0

http://snag.gy/nw541.jpg –

+0

这是查询你没有a.id,b.id和c.id,我问你是否可以添加它们,以便我们也可以看到这些。就像我说的把它变成一个sql小提琴会使这更容易^^ – Jester

+0

http://snag.gy/84io0.jpg –

相关问题