Select 从 2 个表中重复第二行到第一行中的每一行

Select from 2 tables by repeating the rows from the second to each row in the first

我有一种情况想用这种方式简化它。 (我在 Sql 服务器上写这个)

假设我有 2 个表如下:

书籍

+----------+
|书号 |
+--------+
| 1 |
+--------+
| 2 |
+--------+
| 3 |
+--------+

图书租赁

+--------+------------+-------------+
|书号 |出租人 |租赁日期 |
+--------+------------+-------------+
| 1 |一个 | 2015 年 1 月 1 日 |
+--------+------------+-------------+
| 2 |一个 | 2015 年 2 月 1 日 |
+--------+------------+-------------+
| 1 | B | 2015 年 3 月 1 日 |
+--------+------------+-------------+
| 3 | B | 2015 年 4 月 1 日 |
+--------+------------+------------+

我需要编写一个 select 语句来产生以下结果:

+--------+------------+-------------+
|书号 |出租人 |租赁日期 |
+--------+------------+-------------+
| 1 |一个 | 2015 年 1 月 1 日 |
+--------+------------+-------------+
| 2 |一个 | 2015 年 2 月 1 日 |
+--------+------------+-------------+
| 3 |一个 |空 |
+--------+------------+-------------+
| 1 | B | 2015 年 2 月 1 日 |
+--------+------------+-------------+
| 2 | B |空 |
+--------+------------+-------------+
| 3 | B | 2015 年 2 月 1 日 |
+--------+------------+------------+

非常感谢任何帮助。

所以您想要交叉连接所有图书和所有租客,添加一列显示 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 的 table,您可能想要使用它,而不是子查询 (SELECT DISTINCT RentedBy FROM BookRentals)