MySQL group_concat踩坑

MySql group_concat踩坑

摘要

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表字符

相關文章
相關標籤/搜索