SELECT上的“ 1062重复条目”

时间:2019-07-02 20:36:18

标签: mysql

我有一个SELECT查询,它返回以下错误:

  

SQLSTATE [23000]:违反完整性约束:1062项“”的重复条目“ user_id-name email@address.com--2018-11-04 01:24:38”

(出于隐私考虑,我替换了user_id,姓名和电子邮件)

SELECT users.user_id, users.fullname, users.email, users.phone_formatted, users.date_created, 
MAX(cards.card_id) AS latest_card_id, MAX(cards.date_created) AS latest_date_card, MAX(punches.date_created) AS date_lastvisited 

FROM users 
INNER JOIN cards ON cards.user_id = users.user_id 
INNER JOIN punches ON punches.card_id = cards.card_id 

WHERE punches.business_id=1626 

GROUP BY users.user_id, users.fullname, users.email, users.phone_formatted, users.date_created 

ORDER BY users.fullname;

以下是卡片,打孔机和用户的表定义:

CREATE TABLE `cards` (
  `card_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `business_id` int(11) DEFAULT NULL,
  `printjob_id` int(11) DEFAULT NULL,
  `temp` varchar(256) DEFAULT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '1',
  `whitelabel_id` int(11) NOT NULL DEFAULT '0',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`card_id`),
  KEY `printjob_id` (`printjob_id`),
  KEY `active` (`active`),
  KEY `user_id` (`user_id`),
  KEY `business_id` (`business_id`)
) ENGINE=InnoDB AUTO_INCREMENT=576475 DEFAULT CHARSET=latin1;


CREATE TABLE `punches` (
  `punch_id` int(11) NOT NULL AUTO_INCREMENT,
  `punch_count` int(11) unsigned NOT NULL DEFAULT '1',
  `employeebonus` tinyint(1) NOT NULL DEFAULT '0',
  `details` text,
  `card_id` int(11) DEFAULT NULL,
  `behaviour` set('basicpunch','employeebonus','visitsregularly','broughtfriend','mytreat','firstcustomer','dailyrepeater','visitslocations','facebookshare','mostfrequent','longabsence','registerer','employeepromoter','luckiest','enroll','opportunist') NOT NULL DEFAULT 'basicpunch',
  `location_id` int(11) DEFAULT NULL,
  `business_id` int(11) DEFAULT NULL,
  `employee_id` int(11) DEFAULT NULL,
  `v1` float DEFAULT NULL,
  `eventcounter` smallint(5) unsigned NOT NULL DEFAULT '0',
  `date_local` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`punch_id`),
  KEY `business_id` (`business_id`),
  KEY `employee_id` (`employee_id`),
  KEY `card_id` (`card_id`),
  KEY `date_created` (`date_created`),
  KEY `behaviour_id` (`behaviour`),
  KEY `location_id` (`location_id`),
  KEY `employeebonus` (`employeebonus`),
  KEY `punch_count` (`punch_count`)
) ENGINE=InnoDB AUTO_INCREMENT=807402 DEFAULT CHARSET=latin1;


CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `fullname` varchar(60) DEFAULT NULL,
  `email` varchar(50) NOT NULL,
  `undeliverable` tinyint(4) DEFAULT '0',
  `phone_formatted` varchar(25) DEFAULT NULL,
  `phone_unformatted` varchar(15) DEFAULT NULL,
  `password_hash` char(64) DEFAULT NULL,
  `password_salt` char(6) DEFAULT NULL,
  `reset_hash` binary(32) DEFAULT NULL,
  `date_reset` datetime DEFAULT NULL,
  `stripecustomer_id` int(11) DEFAULT NULL,
  `stripe_customer_id` varchar(40) DEFAULT NULL,
  `stripe_customer_access_id` varchar(40) DEFAULT NULL,
  `problemwithpayment` tinyint(1) NOT NULL DEFAULT '0',
  `enterprisemanager_whitelabel_id` int(11) NOT NULL DEFAULT '0',
  `god` tinyint(1) NOT NULL DEFAULT '0',
  `date_created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`),
  KEY `email` (`email`),
  KEY `phone_unformatted` (`phone_unformatted`),
  KEY `date_reset` (`date_reset`),
  KEY `undeliverable` (`undeliverable`)
) ENGINE=InnoDB AUTO_INCREMENT=16809 DEFAULT CHARSET=latin1;

我不明白如何通过SELECT查询来获取此错误。当我删除MAX()函数时,不再出现错误。

0 个答案:

没有答案