[英]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.