繁体   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