group_concat有長度限制,致使結果被截取,部分結果丟失sql
需求:當學生入學的時候,若是auto_invoice_customer中不存在這個學生,則將學生信息插入auto_invoice_customer表code
表:auto_invoicetable
字段名 | 類型 | 備註 |
---|---|---|
ID | int(11) | 主鍵 |
... |
表: auto_invoice_customerclass
字段名 | 類型 | 備註 |
---|---|---|
ID | int(11) | 主鍵 |
auto_invoice_id | int(11) | 表auto_invoice的ID |
student_id | int(11) | 學生ID |
... |
SELECT ai.ID, GROUP_CONCAT( aic.STUDENT_ID ) studentIds FROM auto_invoice ai INNER JOIN auto_invoice_customer aic ON aic.AUTO_INVOICE_ID = ai.ID WHERE 1 = 1 GROUP BY ai.ID;
經過上面的SQL查詢出全部已存在的學生列表,代碼中判斷:若是學生不存在,則插入到auto_invoice_customer表查詢
問題: GROUP_CONCAT有長度限制,默認爲1024個字符。當已經存在的學生太多時,studentIds長度超過1024時,會有一部分學生被截掉,或者最後一個學生截掉了一部分。 致使有部分學生沒查到,認爲不在auto_invoice_customer中,致使重複插入。tab
長度限制能夠經過下面的SQL查詢:co
SHOW VARIABLES LIKE '%group_concat%';
SELECT ai.ID, studentId FROM auto_invoice ai INNER JOIN auto_invoice_customer aic ON aic.AUTO_INVOICE_ID = ai.ID WHERE 1 = 1
經過上面的SQL查詢出全部已存在的學生,代碼中判斷:若是學生不存在,則插入到auto_invoice_customer表字符