【问题标题】:Selecting a list of available numbers between a range, joining a reserved range table选择范围之间的可用数字列表,加入保留范围表
【发布时间】:2020-07-07 09:31:35
【问题描述】:

我目前有三个表:

产品

    Number | Name | Description

ProductNumberReservation

    ID | Start | End | Description

数字范围

    Num

NumberRange 只是可能的产品编号的顺序列表(有效为 1-999999)。 ProductNumberReservation 是一个表格,其中包含一系列被视为“保留”的产品编号 产品是系统中产品的标准列表。

我希望能够查看某个范围内所有产品 ID 的状态(下面的示例 1-6),如下所示:

| Number | Description         |
|--------|---------------------|
| 1      | Our First Product   |
| 2      |                     |
| 3      | Reservation Range 1 |
| 4      | Reservation Range 1 |
| 5      | Reservation Range 1 |
| 6      |                     |

预订可以重叠,但我很高兴返回多行,如下所示:

| Number | Description         |
|--------|---------------------|
| 1      | Our First Product   |
| 2      |                     |
| 3      | Reservation Range 1 |
| 4      | Reservation Range 1 |
| 4      | Reservation Range 2 |
| 5      | Reservation Range 1 |
| 5      | Reservation Range 2 |
| 6      |                     |

谢谢!

【问题讨论】:

  • 请提供样本数据和期望的结果。我不明白你为什么需要三个表。

标签: sql linq


【解决方案1】:

这应该可以满足您的需要...(请注意,我已将字段名称 Start 和 End 更改为 RangeStart 和 RangeEnd 以避免使用 End 关键字)

SELECT n.Num, COALESCE(p.Description, r.Description) as Description
FROM Numbers n
LEFT OUTER JOIN Product p
    ON n.Num = p.Number
LEFT OUTER JOIN ProductNumberReservation r
    ON n.Num >= r.RangeStart
    AND n.Num <= r.RangeEnd

【讨论】:

  • 谢谢,完美运行。虽然我确实将连接范围切换为介于:在 r.[Start] 和 r.[end] 之间的 n.Num 上的左外连接 ProductNumberReservation r
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
相关资源
最近更新 更多