MySql:“字段列表”中未知的列 ID

问题描述 投票:0回答:3

我正在关注这个问题的答案: MySQL:是否可以对多行进行分组连接?

但是我遇到了 MySql 错误:

#1054 - Unknown column 'CM_Cocktail.id' in 'field list'
.

当我删除这个 CM_Cocktail.id 内容时,会出现下一个错误:

#1054 - Unknown column 'CM_Zutat.name' in 'field list'
。我尝试使用别名,但情况变得更糟......也许我是盲目的。

SELECT 
  CM_Cocktail.id, CM_Cocktail.name,
  GROUP_CONCAT(CM_Zutat.name SEPARATOR ', ')
FROM (
  SELECT CM_Cocktail.id, CM_Cocktail.name AS cname, CM_Zutat.name
              FROM CM_Cocktail, CM_CocktailHatZutat, CM_Zutat
              WHERE CM_Cocktail.id=CM_CocktailHatZutat.cocktail_id
              AND CM_CocktailHatZutat.zutat_id=CM_Zutat.id
) group_attr
GROUP BY CM_Cocktail.id;

CREATE TABLE IF NOT EXISTS `CM_Cocktail` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

CREATE TABLE IF NOT EXISTS `CM_CocktailHatZutat` (
  `cocktail_id` int(3) NOT NULL,
  `zutat_id` int(3) NOT NULL,
  `zutat_menge` int(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `CM_Zutat` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

php mysql sql
3个回答
7
投票

您需要在子查询中定义列别名,然后使用别名作为父字段,如下例所示:

SELECT 
CocktailID, cname,
GROUP_CONCAT(ZName SEPARATOR ', ')
FROM (
SELECT CM_Cocktail.id as CocktailID, CM_Cocktail.name AS cname, CM_Zutat.name as ZName
     FROM CM_Cocktail, CM_CocktailHatZutat, CM_Zutat
     WHERE CM_Cocktail.id=CM_CocktailHatZutat.cocktail_id
     AND CM_CocktailHatZutat.zutat_id=CM_Zutat.id
) group_attr
GROUP BY CocktailID;

1
投票

请尝试这个

SELECT 
id, name,
GROUP_CONCAT(CM_Zutat.name SEPARATOR ', ')
FROM (
SELECT CM_Cocktail.id, CM_Cocktail.name AS cname, CM_Zutat.name
          FROM CM_Cocktail, CM_CocktailHatZutat, CM_Zutat
          WHERE CM_Cocktail.id=CM_CocktailHatZutat.cocktail_id
          AND CM_CocktailHatZutat.zutat_id=CM_Zutat.id
) group_attr
GROUP BY id;

因为你使用子查询


0
投票

该错误通常是因为新列添加到实体中并且 hibernate 无法更新实体。要解决此问题,请在 application.properties 或 application.yaml 文件中,将 hibernate ddl 从 update 更改为 create-drop

 jpa:
    database: MYSQL
    hibernate:
      ddl-auto: create-drop

注意:这不应该在生产中完成,因为它会清除数据库。

© www.soinside.com 2019 - 2024. All rights reserved.