【发布时间】:2012-11-10 05:22:35
【问题描述】:
这些是我的桌子:
`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
我想要做的是运行一个查询,它给我完全相反的结果(桌子房间中的房间号码不在桌子付款中)。这可以通过将上述查询的房间结果与列房间号码进行比较来完成在房间的桌子上。到目前为止我的一些努力:
`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”。我可以做到与简单的表进行比较。但在我的示例中,我必须将列与表连接中的列进行比较...
任何建议将不胜感激。
【问题讨论】:
标签: mysql select join left-join