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