一對多沒有建立中間表的時候經常會采用分隔符的形式將“多”存儲在“一”的一個字段裡,這樣做的代價是無法向一對多的時候那樣直接關聯查詢,一般采用在程序中分割後分別查詢的辦法。如下圖:
如何才能直接用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