我有一些来自 MySQL 中的一对视图的预订数据。它们完美匹配列,主要区别在于放置在这些行之一中的预订代码。
上下文如下:这是用于计算运动营的数字。人们已预订,但可以进行额外的活动。
查看 1:所有专业预订(例如:足球课)。
视图 2:一般组。
由于软件老旧,订票过程中很多人为普通团订票,然后升级到旧舱位。业务中其他地方的一些事情使这进一步复杂化。
需要明确的是 - 视图 1 实际上包含视图 2 中的一些(但不完全是全部)人员。这两个组有一个交集。显然,人们不能同时分成两组(只有一组!)。
查找视图 2 中的所有人当然很容易......视图 1 也是如此。但是,我需要生成一份报告,该报告基本上是:
- “View 1”覆盖“View 2”......或者换一种方式:
- “查看 1” [排序] UNION “查看 2”
但是:我不确定这样做的最佳方法,因为有额外的复杂性:
每行大致如下(省略其他内容)如下:
User ID Timeslot Activity
1 A Football
1 A General
2 A General
3 A Football
如您所见,这些行都涉及时间段 A: - 用户 2 进行一般活动。- 用户 3 踢足球。- 用户 1 做足球和一般运动。
由于这些项目不是唯一的,因此上面是一个 UNION(不同的),因为没有真正不同的行。
我需要的输出如下:
User ID Timeslot Activity
1 A Football
2 A General
3 A Football
在这里,足球已经“优先”于“一般”,因此我可以随时了解人们的位置。
这个 UNION 在许多字段上有一个不同的子句,但忽略了其他字段。
所以:有谁知道如何做相当于:
- “将两个表加在一起,如果它是相同的时间段,则覆盖其中一个”
或者类似的东西:
- “在 UNION DISTINCT 上选择性不同”。
干杯瑞克