2013-10-30 111 views
1

我無法將3個表連接在一起。我有一個SELECT,適用於兩個表格,這是我希望看到的主要數據。我還想將稅率和稅率添加到所選單位。它們存儲在不同的表格中,因爲在我的情況下,單位可以有多個費率。這裏是工作的查詢:與3個表的左連接

SELECT u.unit_name from units u 
LEFT JOIN reservations r ON r.unit = u.id 
    AND r.arrival <= 2013-10-11 
    AND r.departure >= 2013-10-01 
WHERE r.unit IS NULL 

和一個我試圖讓不:

SELECT u.unit_name, ur.unit, ur.rate, ur.tax 
FROM units u 
LEFT JOIN reservations r 
INNER JOIN unit_rates ur 
    ON r.unit = u.id 
    ON ur.unit = u.id 
    AND r.arrival <= 2013-10-11 
    AND r.departure >= 2013-10-01 
WHERE r.unit IS NULL 
    AND ur.active = TRUE 

這裏是SQLfiddle:http://sqlfiddle.com/#!2/b303ad

回答

2
SELECT u.unit_name, ur.unit, ur.rate, ur.tax 
FROM units u 
LEFT JOIN reservations r ON r.unit = u.id 
AND r.arrival <= 2013-10-11 
AND r.departure >= 2013-10-01 
JOIN unit_rates ur ON ur.unit = u.id 
WHERE r.unit IS NULL 

把ON每個JOIN後的條件。

SQL fiddle

+0

這不是yeilding任何結果。我不應該在第二次JOIN中使用INNER嗎?右連接有效,但將名稱保留爲NULL ...? –

+0

取決於您需要在原始帖子中顯示一些示例數據。 – Mihai

+0

試圖使此sqlfiddle:'CREATE TABLE unit_rates ( ID INT, 單元INT(4), 率十進制(10,4), 稅十進制(10,4), 活性TINYINT(1) ) ; INSERT INTO unit_rates(id,unit,rate,tax,active) VALUES(1,1000,100.00,10.00,1); CREATE TABLE units { id int, name varchar(10) }; INSERT INTO units(id,name)VALUES(1000,「BOB」); CREATE TABLE reservations id int,unit int(4),arrival varchar(10),departure varchar(10) }; INSERT INTO保留(1,1000,「2013-09-25」,「2013-09-30」);' 但它不會生成。 –

0

你對中只需使用AND

SELECT u.unit_name, ur.unit, ur.rate, ur.tax 
FROM units u 
LEFT JOIN reservations r 
INNER JOIN unit_rates ur 
/* Another table */ 
ON r.unit = u.id 
    AND ur.unit = u.id 
    AND r.arrival <= 2013-10-11 
    AND r.departure >= 2013-10-01 
WHERE r.unit IS NULL AND ur.active = TRUE 
+0

我得到這個錯誤:'#1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第10行'WHERE r.unit IS NULL AND ur.active = TRUE LIMIT 0,30'附近使用正確的語法 –