【问题标题】:Is this multiple join on 2 tables possible?可以在 2 个表上进行多重连接吗?
【发布时间】:2020-08-07 09:11:05
【问题描述】:

我有 2 个表,但无法加入它以提供所需的输出。

第一个表称为 Future。这是我未来的会议。

Date         Name    Subject          Importance    Location
7/08/2020    David   Work             1             London
7/08/2020    George  Updates          2             New York
7/08/2020    Frank   New Appointments 5             London
7/08/2020    Steph   Policy           1             Paris

第二个表称为Previous。这是我以前的会议。


Date         Name    Subject         Importance    Location     Time      Rating
1/08/2020    David   Work            3             London       23.50     4
2/10/2018    David   Emails          3             New York     18.20     3
1/08/2019    George  New Appointments5             London       55.10     2
3/04/2020    Steph   Dismissal       1             Paris        33.20     5 

现在我需要按名称引用我之前的表格,以查看我之前与此人进行的会议,并且我想要之前表格中的所有数据。我还需要将其限制为仅显示与每个人最多 5 次以前的会议。


Date         Name    Subject         Importance    Location     Time      Rating
7/08/2020    David   Work            1             London       -         -
1/08/2020    David   Work            3             London       23.50     4
2/10/2018    David   Emails          3             New York     18.20     3
7/08/2020    George  Updates         2             New York     -         -
1/08/2019    George  New Appointments5             London       55.10     2

名称列需要左连接,但我只需要对其他列进行常规连接。也不确定如何将名称结果限制为最多 5 个相同的值。提前感谢您的帮助。

【问题讨论】:

  • 我建议把两张表合并成一张表,这样你的生活会轻松很多。
  • 感谢您对@TimBiegeleisen 的评论。这种方式可能需要一些工作,但从长远来看可能会更容易。很容易在日期上使用 where 子句来获得未来的会议,但是我将如何引用该表来获得与每个客户的前 4 次会议?
  • 根据您的 SQL 版本,您可以使用 LAG 函数。单个表所需的功能可能已经内置到您的 SQL 版本中。
  • 同意蒂姆的观点,您可以使用另一列来识别已经发生的会议,或者您可以随身携带这些知识,知道空时间和评级意味着它还没有发生。对于从未见过桌子的人来说,很容易推断出这一点。但是返回一个有限的组仍然很棘手。你必须用组创建一些。
  • @undecided000 。 . .斯蒂芬和弗兰克怎么了?

标签: sql join reference limit


【解决方案1】:

基本上,你想要union all:

select m.*
from ((select Date, Name, Subject, Importance, Location, NULL as time, NULL as rating
       from future
      ) union all
      (select Date, Name, Subject, Importance, Location, time, rating
       from previous
      ) 
     ) m
group by name, date desc;

您可以对该结果应用其他条件。目前尚不清楚您真正想要的其他条件,但这是一个开始。

【讨论】:

  • 感谢您的宝贵时间。所以这会返回我表中的所有内容?我只想查看与我明天或将来会面的人,并且我还需要将结果限制为最多仅显示 4 次之前的会议。是否可以将此添加到此语法中?另外为了回答您的其他问题,我忘记将 Frank 和 Steph 添加到底部表格中,他们应该在那里。
  • 更改“从以前选择日期、名称、主题、重要性、位置、时间、评级”为“从以前选择顶部 (4) 日期、名称、主题、重要性、位置、时间、评级”只获得以前条目的前 4 个结果
  • 谢谢维陶塔斯。我正在使用 postgressql。我在之前使用了限制功能,但仍在括号内,这限制了我只能从之前获得 4 个结果。我想为每个不同的名字设置最多 4 个。
猜你喜欢
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多