2

我有以下查詢:MySQL的 - ON只有當兩個獨特的匹配字段重複鍵UPDATE,INSERT其他

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

目前它的遞增counter當任occ_dateservice_tag在一排匹配。 其中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_dateservice_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  

請幫幫忙!

+0

'ADD UNIQUE KEY(occ_date,service_tag)'這應該對你有所幫助。 –

+0

你可以分享'desc occ_apps'結果。 –

+0

@KeyurShah總是更好地要求SHOW CREATE TABLE而不是 – e4c5

回答

1

我不認爲你甚至需要在你的表中有一個計數器字段。它看起來像你的櫃檯只是保持一個給定值發生的次數。這是一個可以很容易地使用組來產生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查詢聚合所能做到的而言,這只是冰激凌的一角。請花點時間閱讀它。

+0

在提取時,我需要'SELECT'' occ_date',其中'counter'> 5'AND''service_tag' ='service-1'。這就是爲什麼我需要爲同一日期和同一服務增加'counter',即只有當'occ_date'和'service_tag'已經存在於一行中時,否則'INSERT'新行。 –

+0

是的,你仍然在尋找組 – e4c5

+0

謝謝,它按預期工作,我不知道我也可以這樣做。感謝您的耐心和努力!願你的企業快速成長! –

相關問題