これらは私のテーブルです:
`room`(roomID,roomNum)
`customer`(customerID,Surname,etc)
`contract`(contractID,roomID,weekNum)
`paymen`t(paymentID,customerID,contractID,YearKoino)
そして、次のクエリを使用すると:
`select` room.roomnum
`from` payment,contract,room,customer
`where` payment.contractID = contract.contractID
`and` contract.roomID=room.roomID
`and` customer.customerID=payment.customerID
`and` contract.weeknum='40'
`and` payment.YearKoino='2007' ;
私が得ている結果は次のとおりです。
+---------+
| roomnum |
+---------+
| Δ-12 |
| Γ-22 |
| Α-32 |
| Γ-21 |
| Δ-11 |
| Ε-12 |
| Γ-31 |
| Ε-22 |
| Α-22 |
| Δ-12 |
| Γ-12 |
+---------+
11 rows in set
私がやりたいのは、正反対の結果を返すクエリを実行することです(テーブル支払いにないテーブルルームのroomnums)。これは、上記のクエリのroomumの結果を部屋のroomnum列と比較することで実行できますtable.これまでの私の取り組みの一部:
`Select` room.roomnum
`from` room
`where` NOT EXISTS
(`select` room.roomnum
`from` payment,contract,room,customer
`where` payment.contractID = contract.contractID
`and` contract.roomID=room.roomID
`and` customer.customerID=payment.customerID
`and` contract.weeknum='40'
`AND` payment.YearKoino='2007');
Empty set
と
`SELECT` *
`FROM` customer a
`LEFT OUTER JOIN` payment b
`on` a.customerID=b.customerID
`where` a.customer is null;
また、「NOT EXISTS」を「NOT IN」に置き換えようとしましたが、無駄でした。それを行う最良の方法は「左結合」を使用することだと読んだことがあります。単純なテーブルですが、私の例では、テーブルの結合にある列と列を比較する必要があります...
アドバイスをいただければ幸いです。