簡體   English   中英

左外連接查詢

[英]Left Outer Join Query

我有兩張桌子,一張用於預訂,一張用於房間分配。 預訂表有一個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服務器版本相對應的手冊以獲取正確的語法,以在'id WHERE(rbs_room_allocation.id IS NULL)AND(booking.trip_id =?)AND(booking'at line 1)附近使用]

我不知道為什么這不起作用,我嘗試將id放入查詢中而不是使用參數,但是遇到相同的錯誤,因此我假設這與查詢有關。 任何幫助深表感謝!

試試這個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)";

您需要將using子句的id列放在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)";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM