【问题标题】:MySQL, is there any way to use multiple alias?MySQL,有没有办法使用多个别名?
【发布时间】:2012-11-24 08:52:27
【问题描述】:

假设我们有一个包含表格的数据库:
“艺术家”(列:名称、id)和
“歌曲”(标题、composer_id、songwriters_id)。

我想打印带有作曲家姓名和词曲作者姓名的歌曲。 我已经成功地打印了作曲家的名字:

SELECT title, name AS Composers_Name 
  FROM artist, song 
    WHERE song.composers_id = artist.id;

我无法获取词曲作者的姓名..
我尝试的是这样的:

SELECT title, name AS Composers_Name, name AS Songwriters_name
  FROM artist, song 
    WHERE song.composers_id = artist.id AND song.songwriters_id = artist.id;

但这会返回作曲家和词曲作者是同一个人的所有歌曲。 我正在考虑使用 JOIN,但我不确定如何..

【问题讨论】:

  • 你的问题真的不清楚。您只有一个 name 列(在 artist 表中)。你怎么能把它作为作曲家的名字和作曲家的名字呢?
  • 有什么不清楚的地方?假设艺术家是作曲家或词曲作者。
  • 克里斯,太好了。你怎么知道哪个是哪个(哪个应该是词曲作者,哪个作曲家)?您现在是在询问将多行合并为一行吗?如果是这样,您需要一种方法来区分名称所代表的类型。
  • 我知道我对此发表评论和回答很晚,但是您可以尝试使用 SQL 中称为关系除法的概念,它实际上可以解决您的问题。我最近遇到了一个类似的问题,并使用桌面上的关系除法解决了它。此外,使用这种方式,您也不需要执行连接,只需要一个查询。

标签: mysql


【解决方案1】:

您必须从表格艺术家中选择 2 次。

select s.title, a1.name AS Composer, a2.name as songwriter
from song s, artist a1, artist a2 
where s.composers_id = a1.id and s.songwriters_id = a2.id;

假设作曲家和作曲家都存储在艺术家表中。

【讨论】:

  • 这就是我试图做的,但我不知道我必须重写一个表来重新命名它。
【解决方案2】:

使用左连接

SELECT s.title, c.name AS Composers_Name, a.name AS Songwriters_name
  FROM song s
  LEFT JOIN artist a ON s.songwriters_id = a.artistID
  LEFT JOIN artist c ON s.composers_id = c.artistID

【讨论】:

    【解决方案3】:

    我建议使用 join 或定义每个表别名来访问它们的字段。

    SELECT a.title, a.name AS Composers_Name, s.name AS Songwriters_name
    FROM artist a, song s 
    

    但在您的问题中,词曲作者姓名字段缺失。之间可以按照这种方式访问​​。

    【讨论】:

      猜你喜欢
      • 2020-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多