2010-08-25 6 views
1

У меня есть два стола, один для бронирования и один для размещения в номерах. Таблица бронирования имеет таблицу идентификаторов номеров и номеров, имеет id и room_id (идентификатор относится к идентификатору бронирования). Я хочу найти список всех заказов, у которых нет записи в таблице распределения мест.Left Outer Join Query

Я сделал следующий запрос:

$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 Я получаю сообщение об ошибке, которая говорит:

[Native сообщение: У вас ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать рядом с Ид WHERE (rbs_room_allocation.id IS NULL) И (booking.trip_id =?) и (номер 'в строке 1]

I не знаю, почему это не работает, я попытался поместить идентификатор в запрос вместо использования параметров, но я получаю ту же ошибку, поэтому я предполагаю, что это что-то связано с моим запросом. Любая помощь очень ценится!

ответ

2

вам нужно поместить столбец ID для USIN g в парах:

$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

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