我有一种情况,我想以这种方式简化它。 (我在Sql Server中写这个)
想象一下,我有两张表如下:
图书
+ --------- +
| BookID |
+ --------- +
| 1 |
+ --------- +
| 2 |
+ --------- +
| 3 |
+ --------- +
BookRentals
+ --------- + ------------- + --------------- +
| BookID | RentedBy | RentalDate |
+ --------- + ------------- + --------------- +
| 1 | A | 1/1/2015 |
+ --------- + ------------- + --------------- +
| 2 | A | 2015年2月1日|
+ --------- + ------------- + --------------- +
| 1 | C | 2015年3月1日|
+ --------- + ------------- + --------------- +
| 3 | C | 2015年4月1日|
+ --------- + ------------- + --------------- +
我需要编写一个产生以下结果的select语句:
+ --------- + ------------- + --------------- +
| BookID | RentedBy | RentalDate |
+ --------- + ------------- + --------------- +
| 1 | A | 1/1/2015 |
+ --------- + ------------- + --------------- +
| 2 | A | 2015年2月1日|
+ --------- + ------------- + --------------- +
| 3 | A | NULL |
+ --------- + ------------- + --------------- +
| 1 | C | 2015年2月1日|
+ --------- + ------------- + --------------- +
| 2 | C | NULL |
+ --------- + ------------- + --------------- +
| 3 | C | 2015年2月1日|
+ --------- + ------------- + --------------- +
非常感谢任何帮助。
答案 0 :(得分:3)
所以你想要所有书籍和所有租户的交叉连接,添加一个列,显示给定的BookID和Renter组合的RentalDate(如果有的话)?
试试这个:
SELECT B.BookId, R.RentedBy, BR.RentalDate
FROM Books AS B
CROSS JOIN (SELECT DISTINCT RentedBy FROM BookRentals) AS R
LEFT JOIN BookRentals AS BR ON BR.BookId = B.BookId AND BR.RentedBy = R.RentedBy
如果您已经有一个包含所有租用者ID的表,您可能希望使用该表而不是子查询(SELECT DISTINCT RentedBy FROM BookRentals)
。