MySQL联盟??查询帮助

MySQL联盟??查询帮助,mysql,sql,Mysql,Sql,我有两张桌子。一个是相册信息,另一个是库存中这些相册的实际副本。根据各种因素,它们有不同的价格。库存表中的每一行都不直接存储相册信息,只存储相册表中相册的id 我想写的查询将从albums表中获取艺术家姓名、专辑名称、图像等,以及在inventory表中找到的最高和最低价格 我知道基本的MySQL,但我在这方面遇到了很多麻烦。请专家帮我一下好吗?非常感谢 相册表: id pk 标题 艺术家 年 体裁 库存表: idpk albumId对应于albums表中的一个id 价格 条件 单声道 我尝试的

我有两张桌子。一个是相册信息,另一个是库存中这些相册的实际副本。根据各种因素,它们有不同的价格。库存表中的每一行都不直接存储相册信息,只存储相册表中相册的id

我想写的查询将从albums表中获取艺术家姓名、专辑名称、图像等,以及在inventory表中找到的最高和最低价格

我知道基本的MySQL,但我在这方面遇到了很多麻烦。请专家帮我一下好吗?非常感谢

相册表:

id pk 标题 艺术家 年 体裁 库存表:

idpk albumId对应于albums表中的一个id 价格 条件 单声道 我尝试的查询如下所示,但给了我一个错误:

SELECT albums.artist, albums.title, albums.imgurl, albums.id
  FROM albums

UNION 

SELECT max(inventory.price), min(inventory.price)
 WHERE albums.id = inventory.albumId 
 LIMIT 30

SELECT * FROM `albums`

由两部分组成的联合体的两部分必须具有相同的列数,并且类型必须相同或可处理,就像它们是相同的一样

你的第二部分甚至没有FROM子句

最后一行是一个单独的查询,应该用分号与前一行分开

你想要的或多或少是:

 SELECT a.artist, a.title, a.imgurl, a.id, MAX(i.price), MIN(i.price)
   FROM albums    AS a
   JOIN inventory AS i ON a.id = i.albumId
--WHERE ...conditions on artist or album...
  GROUP BY a.artist, a.title, a.imgurl, a.id

请注意,使用表别名如何使选择列表适合一行。当然,它并不总是如此,但使用别名可以提供简洁性,并鼓励使用原始表标记所有列,这有助于明确数据的来源,从而提高可读性和清晰度以及其他优良品质。

两部分联合的两部分必须具有相同的列数,而且这些类型必须是相同的或可以治疗的,就好像它们是相同的一样

你的第二部分甚至没有FROM子句

最后一行是一个单独的查询,应该用分号与前一行分开

你想要的或多或少是:

 SELECT a.artist, a.title, a.imgurl, a.id, MAX(i.price), MIN(i.price)
   FROM albums    AS a
   JOIN inventory AS i ON a.id = i.albumId
--WHERE ...conditions on artist or album...
  GROUP BY a.artist, a.title, a.imgurl, a.id

请注意,使用表别名如何使选择列表适合一行。当然,它并不总是这样,但使用别名可以提供简洁性,并鼓励使用原始表标记所有列,这有助于明确数据的来源,从而提高可读性和清晰度以及其他优良品质。

您不能这样使用UNION。两个查询的结果集必须相同,即相同的列数和相同的类型,才能使:

在每个SELECT语句的相应位置列出的选定列应具有相同的数据类型。例如,第一条语句选择的第一列的类型应与其他语句选择的第一列的类型相同


您必须进行单独的查询。

您不能那样使用UNION。两个查询的结果集必须相同,即相同的列数和相同的类型,才能使:

在每个SELECT语句的相应位置列出的选定列应具有相同的数据类型。例如,第一条语句选择的第一列的类型应与其他语句选择的第一列的类型相同


您必须进行单独的查询。

为什么要使用左连接?当你不是被迫使用它们时,避免使用它们。除此之外,它们比普通的内部连接更昂贵。只有MySQL允许缩写的GROUPBY列表。既然问题被标记为MySQL,这是可以的,但它也是非标准的。为什么要使用左连接?当你不是被迫使用它们时,避免使用它们。除此之外,它们比普通的内部连接更昂贵。只有MySQL允许缩写的GROUPBY列表。因为这个问题被标记为MySQL,这是可以的,但它也是非标准的。非常感谢。你的回答实际上是我最初的回答,除了我使用了内部连接而不是连接,并且没有包括GROUPBY。当我运行这个查询时,我只得到一个响应。我现在不能测试这段代码,因为我在工作,但是考虑到你下面的那个家伙发布了相同的查询,我认为这是正确的。我到家后会尽快接受的。我的问题是否只是因为我没有使用GROUP BY?@user379467:当选择列表中包含聚合和非聚合时,必须使用GROUP BY。MySQL允许使用缩写的GROUPBY list,其中只列出GROUPBY子句中的主键列。不过,您应该知道,缩写符号是非标准的。我所写的应该适用于任何SQL DBMS。@user379467:注意,JOIN是内部JOIN的缩写。您还可以指定{LEFT | RIGHT}[OUTER]连接,在某些系统上可以指定自然连接,在一些系统上可以使用交叉连接,这基本上只是笛卡尔积。非常感谢。你的回答实际上是我最初的回答,除了我使用了内部连接而不是连接,并且没有包括GROUPBY。当我运行这个查询时,我只得到一个响应。我现在不能测试这段代码,因为我在工作,但是考虑到你下面的那个家伙发布了相同的查询,我会很生气的
我想这是对的。我到家后会尽快接受的。我的问题是否只是因为我没有使用GROUP BY?@user379467:当选择列表中包含聚合和非聚合时,必须使用GROUP BY。MySQL允许使用缩写的GROUPBY list,其中只列出GROUPBY子句中的主键列。不过,您应该知道,缩写符号是非标准的。我所写的应该适用于任何SQL DBMS。@user379467:注意,JOIN是内部JOIN的缩写。您还可以指定{LEFT | RIGHT}[OUTER]连接,在某些系统上可以指定自然连接,在一些系统上可以使用交叉连接,这基本上只是笛卡尔积。