MySQL — 仅在两个唯一字段匹配时才更新重复键,否则插入



>我有以下查询:

"INSERT INTO `occ_apps` (`occ_date`, `service_tag`, `counter`) VALUES (?, ?, '1') ON DUPLICATE KEY UPDATE `counter` = (`counter`+1)"

目前,当 occ_dateservice_tag 在一行中匹配时,它会递增counter。其中occ_dateservice_tagunique字段,我无法为两个唯一字段设置主键。

我运行了以下内容:

ALTER TABLE occ_apps
DROP PRIMARY KEY,
ADD PRIMARY KEY (occ_date, service_tag);

我得到错误:

`#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key`

我希望它仅在occ_date并在一行中service_tag两个匹配项(已经存在)时才更新(递增)计数器,否则它应该插入一个新行。

Software version: 5.5.53-MariaDB-1~wheezy - mariadb.org binary distribution

当我跑DESC occ_apps时,我得到:

Field           Type            Null        Key     Default     Extra
serial_no       int(255)        NO          PRI     NULL          auto_increment
occ_date        varchar(255)    NO          UNI     NULL        
counter         int(255)        NO                  NULL    
service_tag     varchar(255)    YES         UNI     NULL    

我认为您甚至不需要表中的计数器字段。看起来您的计数器只是保存给定值出现的次数。这是可以使用GROUP BY轻松生成的东西

SELECT occ_date, COUNT(*) FROM occ_apps GROUP BY `occ_date`;

因此,您想过滤查询,以便仅获得至少具有 5 个计数的项目?

SELECT occ_date, COUNT(*) FROM occ_apps  WHERE service_tag = 'service-1'
GROUP BY `occ_date` HAVING COUNT(*) > 5

这类问题已经使用GROUP BY解决了数百万次。就SQL查询聚合可以做什么而言,这只是冰山一角。请花点时间阅读它。

最新更新