0

好的,所以我正在尝试编写一个复杂的查询(至少对我来说很复杂)并且需要一些专业帮助。这是我的数据库设置:

表:制作清单

| MakeListId | Make     |
| 1          | Acura    |
| 2          | Chevy    |
| 3          | Pontiac  |
| 4          | Scion    |
| 5          | Toyota   |

表:CustomerMake

| CustomerMakeId | CustomerId | _Descriptor |
| 1              | 123        | Acura       |
| 2              | 124        | Chevy       |
| 3              | 125        | Pontiac     |
| 4              | 126        | Scion       |
| 5              | 127        | Toyota      |
| 6              | 128        | Acura       |
| 7              | 129        | Chevy       |
| 8              | 130        | Pontiac     |
| 9              | 131        | Scion       |
| 10             | 132        | Toyota      |

表:客户

| CustomerId | StatusId |
| 123        | 1        |
| 124        | 1        |
| 125        | 1        |
| 126        | 2        |
| 127        | 1        |
| 128        | 1        |
| 129        | 2        |
| 130        | 1        |
| 131        | 1        |
| 132        | 1        |

我想要结束的是这个......

期望的结果集:

| Make    | CustomerId|
| Acura   | 123       |
| Chevy   | 124       |
| Pontiac | 125       |
| Scion   | 131       |
| Toyota  | 127       |

我想要一个包含一个活动(StatusId = 1) CustomerId 的唯一品牌列表。我假设我必须做一些GROUP BYsJOINS但我无法弄清楚。任何帮助将不胜感激。如果我没有为我的问题提供足够的信息,请告诉我。谢谢!

更新:脚本不必是高性能的 - 它将用于测试目的一次。

4

2 回答 2

2

像这样的东西:

select cm._Descriptor,
       min(cu.customerid)
from CustomerMake cm
  join Customer cu on cuo.CustomerId  = cm.CustomerId and cu.StatusId = 1
group by cm._Descriptor

我省略了 MakeList 表,因为它似乎没有必要,因为_Descriptor无论如何您都将完整的品牌名称存储在 CustomerMake 表中(所以问题是 MakeList 表的用途是什么?为什么不在 CustomerMake 表中存储一个 FK ?)

于 2012-08-21T21:15:12.290 回答
1

你想要

(a) 加入 customer 和 customermake 表 (b) 在 customer.statusid 上过滤
(c) 按 customermake._descriptor 分组

根据您的 RDBMS,您可能需要将组函数显式应用于 customer.customerid 以将其包含在选择列表中。由于您不关心显示的是哪个特定的 customerid,因此您可以使用 MIN 或 MAX 来选择一个基本上任意的值。

于 2012-08-21T21:11:43.103 回答