好的,所以我试图写一个复杂的查询(至少对我来说很复杂),需要一些亲的帮助。这是我的数据库设置:
表:MakeList
| 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 BYs
和JOINS
,但我还没能弄清楚。任何帮助将不胜感激。如果我没有为我的问题提供足够的信息,请告诉我。谢谢!
更新:脚本不具备高性能 - 它将被用于测试目的。
答案 0 :(得分: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表,因为它似乎没有必要,因为你在CustomerMake表中存储了完整的make name _Descriptor
(所以问题是MakeList表是什么?为什么不存储在CustomerMake表中给它一个FK?)
答案 1 :(得分:1)
你想要
(a)加入客户和客户制表
(b)过滤customer.statusid
(c)按customermake._descriptor分组
根据您的RDBMS,您可能需要将组函数显式应用于customer.customerid,以将其包含在选择列表中。由于您不关心显示哪个特定的customerid,您可以使用MIN或MAX来选择一个基本上任意的值。