2016-04-03 23 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 –

相關問題