簡體   English   中英

從SELECT查詢中獲得相反的結果

[英]get the opposite results from a SELECT query

這些是我的表:

`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  

我想做的是運行一個查詢,該查詢給出與我完全相反的結果(表房中不包含在表付款中的Roomnum),這可以通過將上述查詢的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 IN”代替“ NOT EXISTS”,但徒勞。我已經讀到,做到這一點的最佳方法是使用“ left join”。當我不得不比較時,我可以做到這一點。簡單的表。但在我的示例中,我必須將列與表聯接中的列進行比較...

任何意見,將不勝感激。

我不確定為什么您not in

這應該可以工作(不要與表名別名一起使用):

   Select r1.roomnum 
   from room AS r1
   where r1.roomnum NOT IN 
       (select r2.roomnum 
        from payment,contract,room as r2,customer 
        where payment.contractID = contract.contractID
        and contract.roomID=r2.roomID 
        and customer.customerID=payment.customerID 
        and contract.weeknum='40' 
        AND payment.YearKoino='2007');

當然,你必須關聯您的NOT EXISTS查詢與主查詢

Select 
  roomnum 
from 
  room main
where 
  NOT EXISTS (
   select 1 
   from   payment
          inner join contract on payment.contractID = contract.contractID
          inner join room     on contract.roomID = room.roomID 
          inner join customer on customer.customerID = payment.customerID 
   where  contract.weeknum='40' 
          and payment.YearKoino='2007'
          and room.roomnum = main.roomnum  -- < correlation to main query
);

另外,學習SQL-92樣式的聯接。 沒有人會再加入舊樣式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM