1. 程式人生 > >mysql行轉列(拆分字串場景)

mysql行轉列(拆分字串場景)

一對多沒有建立中間表的時候經常會採用分隔符的形式將“多”儲存在“一”的一個欄位裡,這樣做的代價是無法像一對多的時候那樣直接關聯查詢,一般採用在程式中分割後分別查詢的辦法。如下圖:


如何才能直接用sql語句查詢出下圖的效果呢?


可以藉助一個序號表,該表中除了連續的id沒有其它欄位,id的值範圍取決於"一"中儲存的資訊拆分後的數量。


實現sql:

SELECT
	NAME,
	REPLACE(
		SUBSTRING_INDEX(mobile, ',', a.id),
		CONCAT(
			SUBSTRING_INDEX(mobile, ',', a.id - 1),
			','
		),
		''
	)AS mobile
FROM
	squence a
CROSS JOIN(
	SELECT
		NAME,
		CONCAT(mobile, ',')AS mobile,
		LENGTH(mobile)- LENGTH(REPLACE(mobile, ',', ''))+ 1 AS size
	FROM
		`user`
)b ON a.id <= b.size