MySQL错误: duplicate column

标签 mysql sql

我在使用以下 MySQL 查询时遇到了一些问题,但找不到它的来源。

MySQL 告诉我

SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'annonce_dispo_id'

SELECT MAX(max_price) AS `max_price`,
       COUNT(*) AS `nb_annonces`,
       SUM(nb_dispo) AS `nb_dispo`
FROM
  (SELECT `annonce`.`id`,
          CEIL(MAX(price)*1.16) AS `max_price`,
          COUNT(DISTINCT annonce.id) AS `nb_annonces`,
          COUNT(annonce_dispoo.annonce_dispo_id) AS `nb_dispo`,
          `annonce_dispo1`.*,
          `annonce_dispo2`.*
   FROM `annonce`
   LEFT JOIN `annonce_dispo` AS `annonce_dispoo` ON (annonce_dispoo.annonceId = annonce.id
                                                     AND STR_TO_DATE(annonce_dispoo.dispo_date, '%d/%m/%Y') >= CURDATE())
   INNER JOIN `annonce_dispo` AS `annonce_dispo1` ON annonce.id = annonce_dispo1.annonceId
   INNER JOIN `annonce_dispo` AS `annonce_dispo2` ON annonce.id = annonce_dispo2.annonceId
   WHERE ((annonce.city IN
             (SELECT `cities`.`id`
              FROM `cities`
              WHERE (cities.label LIKE 'lyon%'))
           OR annonce.zipcode = 'lyon')
          OR (annonce.city LIKE '28674'
              OR annonce.zipcode = '28674'))
     AND (annonce_dispo1.dispo_date = '27/05/2014')
     AND (annonce_dispo1.disponibility = 'available')
     AND (annonce_dispo2.dispo_date = '31/05/2014')
     AND (annonce_dispo2.disponibility = 'available')
     AND (annonce.visible = 1)
     AND (annonce.completed = 1)
   GROUP BY `annonce`.`id` HAVING (nb_dispo >= 1)) AS `t`

我认为在我使用它们的每个 JOIN 中为表提供了不同的别名,并且无法真正确定还有什么可能输出这样的错误。

最佳答案

请勿在子查询中选择 annonce_dispo1.*annonce_dispo2.*,否则会返回重复的列名称。相反,选择您需要的字段和相应的别名。

SELECT MAX(max_price) AS `max_price`,
       COUNT(*) AS `nb_annonces`,
       SUM(nb_dispo) AS `nb_dispo`
FROM
  (SELECT `annonce`.`id`,
          CEIL(MAX(price)*1.16) AS `max_price`,
          COUNT(DISTINCT annonce.id) AS `nb_annonces`,
          COUNT(annonce_dispoo.annonce_dispo_id) AS `nb_dispo`,
          `annonce_dispo1`.field, `annonce_dispo1`.otherfield,
          `annonce_dispo1`.field as field2, `annonce_dispo1`.otherfield as otherfield2
   FROM `annonce`
   LEFT JOIN `annonce_dispo` AS `annonce_dispoo` ON (annonce_dispoo.annonceId = annonce.id
                                                     AND STR_TO_DATE(annonce_dispoo.dispo_date, '%d/%m/%Y') >= CURDATE())
   INNER JOIN `annonce_dispo` AS `annonce_dispo1` ON annonce.id = annonce_dispo1.annonceId
   INNER JOIN `annonce_dispo` AS `annonce_dispo2` ON annonce.id = annonce_dispo2.annonceId
   WHERE ((annonce.city IN
             (SELECT `cities`.`id`
              FROM `cities`
              WHERE (cities.label LIKE 'lyon%'))
           OR annonce.zipcode = 'lyon')
          OR (annonce.city LIKE '28674'
              OR annonce.zipcode = '28674'))
     AND (annonce_dispo1.dispo_date = '27/05/2014')
     AND (annonce_dispo1.disponibility = 'available')
     AND (annonce_dispo2.dispo_date = '31/05/2014')
     AND (annonce_dispo2.disponibility = 'available')
     AND (annonce.visible = 1)
     AND (annonce.completed = 1)
   GROUP BY `annonce`.`id` HAVING (nb_dispo >= 1)) AS `t`

请参阅此处的示例,该示例不起作用:

http://sqlfiddle.com/#!2/9bb13/1

关于MySQL错误: duplicate column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23859453/

相关文章:

Mysql 查询用作子查询时产生不同的结果

php - 将 SimpleXMLElement 对象数组导出到 MySQL 数据库

php - Laravel:Laravel 中的 MYSQL 查询

Java如何增加数据库表中 double 的值

mysql - 在 mysql select 语句中使用每 2 个字符后在字符串中添加连字符

mysql - SQL查询最后连续相同的数据

php - Magento - 新的自定义模块未安装新的 MySQL 表和其他 SQL 规则

php - 如何将字符串与选项值进行比较

SQL Group by查询从同一个表中选择数据

php - 无法添加或更新子行: a foreign key constraint fails(Foreign key issue in mysql)