2010-08-25 141 views
1

我有兩個表,一個用於預訂,另一個用於房間分配。預訂表有一個ID和房間分配表有一個ID和room_id(ID是指預訂ID)。我想查找所有在房間分配表中沒有條目的預訂的列表。左外部聯接查詢

我提出以下查詢:

$sql = "SELECT booking.id, booking.username, booking.contact_name 
FROM booking LEFT OUTER JOIN rbs_room_allocation 
USING id 
WHERE (rbs_room_allocation.id IS NULL) 
AND (booking.trip_id = :trip_id) 
AND (booking.paid = booking.total)"; 

$params = array('trip_id' => $trip_id); 
$result = $dbh->getAll($sql, null, $params); 

Buut我得到它說的錯誤:

[本地消息:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的 '身份證WHERE(rbs_room_allocation.id IS NULL)AND(booking.trip_id =?)AND(預訂' 在行1]

我正確的語法手冊不知道爲什麼這不起作用,我已經嘗試將ID放入查詢中,而不是使用參數,但是我得到了相同的錯誤,所以我假設它是與我的查詢有關的任何幫助,非常感謝!

回答

2

你需要把id列的全光照g條款裏面parens:

$sql = "SELECT booking.id, booking.username, booking.contact_name 
FROM booking LEFT OUTER JOIN rbs_room_allocation 
USING (id) 
WHERE (rbs_room_allocation.id IS NULL) 
AND (booking.trip_id = :trip_id) 
AND (booking.paid = booking.total)"; 
+0

這工作謝謝!但是我決定將列重命名爲booking_id並且使用「ON」子句,所以它更不明確「id」實際意味着什麼:D – Becky 2010-08-25 14:47:28

3

試試這個not exists查詢:

$sql = "SELECT b.id, b.username, b.contact_name 
FROM booking b 
WHERE 
b.trip_id = :trip_id 
and b.paid = b.total 
AND NOT EXISTS (select 1 from rbs_room_allocation where id = b.id)"; 
+0

我還沒有嘗試過,但我不知道這個條款存在!看起來它會很有用!我稍後可能會嘗試,謝謝。 – Becky 2010-08-25 14:49:14