【问题标题】:How to make correct query with complicated conditions?复杂条件下如何正确查询?
【发布时间】:2021-11-25 18:05:13
【问题描述】:

我有这张桌子:

id  band_id musician_id date_join   date_left   band_name    active_years_begin active_years_end
1   2       7           1960-01-01  1970-12-31  The Beatles  1960-01-01         1970-12-31
2   2       8           1960-01-01  1970-12-31  The Beatles  1960-01-01         1970-12-31
3   2       9           1960-01-01  1970-12-31  The Beatles  1960-01-01         1970-12-31
4   2       10          1960-01-01  1970-12-31  The Beatles  1960-01-01         1970-12-31
5   3       9           1971-12-31  1981-01-01  Wings        1971-12-31         1981-01-01
6   6       5           2017-08-01  NULL        Band1        2017-08-01         NULL
7   7       6           2019-09-01  NULL        Band2        2019-09-01         NULL
8   4       5           2018-09-01  NULL        Band3        2018-09-01         NULL
9   5       5           2018-09-01  NULL        Band4        2018-09-01         NULL
10  9       5           2021-09-01  NULL        Band5        2018-09-01         NULL

我只需要为所有乐队参与者选择参与者设置的乐队名称(date_join == active_years_begin and (date_left is null or active_years_end is null) or (date_left == active_years_end)))。

所以这里的正确答案是披头士乐队、Wings、Band1、Band2、Band3、Band4。

我该怎么做?

【问题讨论】:

  • 为什么不用 Band5? Band5 没有成员变动。
  • @jarlh,它有。它于 2018 年 9 月 1 日开始存在,并于 2021 年 9 月 1 日新成员加入该乐队。所以这个乐队空了 3 年,然后换了。
  • 到目前为止,您是否尝试过任何查询?如果是,请提出问题以便更好地理解
  • 我明白了。我认为你应该有一张乐队桌和一张音乐桌。

标签: mysql sql database


【解决方案1】:
 SELECT DISTINCT band_name 
 FROM year_tbl as a 
 WHERE a.date_join IN (
                       SELECT `active_years_begin` 
                       FROM `year_tbl`) 
                       AND ((a.date_left IS NULL 
                       OR a.active_years_end IS NULL) 
                       OR a.date_left IN (
                                          SELECT active_years_end 
                                          FROM `year_tbl`)
                                          )

【讨论】:

  • Preeti,我相信您的查询可能不会给他所需的输出
  • 经过测试,给出了正确答案....我还附上了输出截图
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多