2016-09-08 7 views
1

お支払いをしていない予約テーブルの詳細をすべて検索したいです。私はMINUSオペレータを使用しました。しかし、それは動作しませんでした。 SQLエラーが発生します。支払いテーブルに存在しない予約番号を取得する方法。SQLでMINUS演算子を使用するには?

これは私のコードです。

$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

+1

何DBをEXISTS助言具体的には、このですか?あなたのエラーは何ですか? –

+1

'MINUS'は製品特有ですが、おそらくMySQLのためのものではありませんか? ANSI SQLには「EXCEPT」があります。 – jarlh

+0

mysqlにマイナス演算子がありません。代わりに –

答えて

1

だけで使用not existsまたはnot 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から他のフィールドを取得する機会が与えられます。

また、クエリ文字列にパラメータを詰め込むのではなく、クエリでパラメータを使用する必要があります。

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 

あなたが望むすべての列を取得することができますし、それは同様のパフォーマンスであなたを助けることができます。

1

実際、MINUSはmysqlにありません。

あなたはクエリがかなりシンプルですが、支払いテーブルに多数のレコードがある場合は最適ではないため、NOT INを使用したソリューションは避けてください。

私は、NOTの使用が

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) 
+0

となります。 http://sqlinthewild.co.za/index.php/2010/02/18/not-exists-vs-not-in/ –

関連する問題