【问题标题】:mysql How to select fields that have the same value in another column AND the same value in another table's column?mysql如何选择在另一列中具有相同值的字段和在另一个表的列中具有相同值的字段?
【发布时间】:2016-04-11 18:23:00
【问题描述】:

说实话,这是作业的一部分,虽然不是那么重要,但仍然如此。 所以,假设我们有以下表格:

        Song                                      Singer_prod

composer     title                            singer      sing_title
   A          a1                                S1            b1
   A          a2                                S3            c3
   B          b1                                S3            c1
   C          c1                                S1            a1
   C          c2                                S1            a2
   C          c3                                S3            c2 
                                                S2            a1

现在,问题是选择那些每首歌曲都只有一位歌手演唱过的作曲家。 例如,作曲家B只有一个标题b1,只有S1演唱。

另外,作曲家 C 写了 c1, c2,c3,全部由 S3 演唱。 这两位作曲家应该会出现在结果中。

相比之下,在作曲家的A歌曲中,a2仅由S1演唱,而a1两人均演唱S1S2,因此 A 不应出现在结果中。

我已经尝试了无数的嵌套 SELECTS、GROUP BY 和 WHERE 组合,但到目前为止都没有成功。我唯一确定的是某处应该需要 count(singer)=1,但到目前为止使用无果。

任何帮助将不胜感激!

【问题讨论】:

  • 向我们展示您迄今为止的尝试
  • 到目前为止,我最好的尝试大致是 Deluca 在下面回答的内容,例如:SELECT composer,singer, title FROM song INNER JOINsinger_prod ON song.title=singer_prod.sing_title GROUP BY composer HAVING count(tragoudistis )=1;不幸的是,它仍然没有返回我所希望的。无论如何,感谢您的关注,希望我能接近!
  • 如果您解释为什么它没有返回您希望的内容以及返回的内容与您的预期内容,将会很有帮助。
  • 抱歉耽搁了。我发现需要的是计数中的“DISTINCT”,count(distinct歌手)=1;由于某种原因,我并不完全清楚!

标签: mysql database select


【解决方案1】:
SELECT Composer, Singer FROM Song x
INNER JOIN Singer_prod y on x.title = y.sing_title
GROUP BY Composer, Singer
HAVING COUNT(Distinct Singer) = 1

【讨论】:

  • 一个好的答案应该包括一个解释,以明确它是如何工作的。这样,发帖人和任何未来的访问者都将学到一些东西,而不仅仅是复制和粘贴代码。
  • 上述 SELECT 包括其歌曲仅由一位歌手演奏的作曲家。问题是一位作曲家的所有歌曲都由一位歌手演唱。
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2017-02-14
  • 1970-01-01
  • 2022-01-01
  • 2017-12-24
  • 2019-08-03
  • 2019-05-31
  • 1970-01-01
相关资源
最近更新 更多