如何在SQL中使用MINUS运算符?

时间:2016-09-08 14:24:54

标签: php sql

我想检索未付款的预订表的所有详细信息。我用过MINUS操作符。但它没有用。它给出了SQL错误。如何获得付款表中不存在的bookingid。

这是我的代码。

$SQL ="SELECT bookingid FROM bookings WHERE checkindate >= '$new_date_in' AND checkoutdate <= '$new_date_out' MINUS  SELECT bookingid FROM payments ";
        $run=mysql_query($SQL,$con) or die ("SQL error");

---- $ new_date_in和$ new_date_out是用户选择的开始和结束日期---

Bookings Table

payments table

3 个答案:

答案 0 :(得分:1)

只需使用not existsnot in

SELECT b.bookingid
FROM bookings b
WHERE b.checkindate >= '$new_date_in' AND
      b.checkoutdate <= '$new_date_out' AND
      b.bookingid NOT IN (SELECT bookingid FROM payments);

这也让您有机会从bookings获取其他字段。

此外,您应该在查询中使用参数,而不是将它们填充到查询字符串中。

答案 1 :(得分:1)

确实MINUS不在mysql中。

您的查询相当简单,但我会避免使用NOT IN的解决方案,因为如果您的付款表中有大量记录,它根本不是最佳的。

我建议使用NOT EXISTS

SELECT b.bookingid FROM bookings b 
WHERE checkindate >= '$new_date_in' 
  AND checkoutdate <= '$new_date_out' 
AND NOT EXISTS ( select 1 from payments p where b.bookingid = p.bookingid )  

答案 2 :(得分:0)

试试这个:

SELECT b.bookingid
FROM bookings b
LEFT JOIN payments p ON p.bookingid = b.bookingid
WHERE 'yourdatevariable' BETWEEN b.checkindate AND b.checkoutdate  
    AND p.bookingid IS NULL

您可以检索所需的所有列,它也可以帮助您提高性能。