MySQL:替换" group by"加入

时间:2018-01-16 13:41:38

标签: mysql sql mariadb

我正在开发一个Laravel项目,我必须处理一些SQL的东西。

由于我想在严格模式下保持MySQL,我必须用一个没有#34;组的查询替换以下查询#34;。 我已经读过,我可以通过加入来达到这个目的,但我真的不知道如何在这个例子中做到这一点。

首先,这是我的示例表,名为" fruits"。请不要介意冗余,我会按原样获取数据:

fruitName     | fruitModel
--------------------------
Banana (Nr 1) | Banana
Banana (Nr 2) | Banana
Banana (Nr 3) | Banana
Apple (Nr 1)  | Apple
Apple (Nr 2)  | Apple
Strawberry    | Strawberry
Banana (Nr 4) | Banana

我想得到下表:

fruitName     | fruitModel
--------------------------
Banana (Nr 1) | Banana
Apple (Nr 1)  | Apple
Strawberry    | Strawberry

因此对于每个我都希望拥有一个 fruitName的fruitModel。它不相关,我得到了什么确切的fruitName。所以像下面这样的结果也可以:

fruitName     | fruitModel
--------------------------
Banana (Nr 3) | Banana
Apple (Nr 2)  | Apple
Strawberry    | Strawberry

我有一个查询,它可以很好地实现这一目标,但是我必须在没有"组的情况下构建一个查询"在严格模式下,每个选定的列都必须在"组中显示为"。这是我目前的查询:

   @Entity
public class Products {
  @Id
  private Long productid;
  @Column(name = "ProductName")
  private String productname;
  private Long supplierid;
  @ManyToOne
  private Categories categoryid;
  private String quantityperunit;
  private Double unitprice;
  private Long unitsinstock;
  private Long unitsonorder;
  private Long reorderlevel;
  private String discontinued;

有没有人知道如何用"替换"组?部分加入一些东西? 谢谢。

1 个答案:

答案 0 :(得分:2)

GROUP BY很好,因为您确实希望每个水果模型都有一个聚合。只有您忘记在水果名称上应用聚合功能。请使用ANY_VALUE

SELECT fruitModel, ANY_VALUE(fruitName) AS fruitName FROM fruits GROUP BY fruitModel;

ANY_VALUE告诉DBMS您对该组的任何值都没问题。

(正如您还标记了MariaDB:我不认为MariaDB功能ANY_VALUE。因此,对于此DBMS,只需使用MINMAX。)