您好,登錄后才能下訂單哦!
這篇文章主要介紹“mysql查詢結果怎么實現多列拼接查詢”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mysql查詢結果怎么實現多列拼接查詢”文章能幫助大家解決問題。
之前遇到過一個問題,mysql數據庫中有兩個表,一張地址表存放省市區等位置信息,另一張用戶表里存在三個字段分別對應地址表中的三個位置信息(很奇怪的表格式),如圖:
現在需要查詢user表中的數據,并根據user表中省市區的值,在地址表中查詢到對應的位置信息(name)并顯示出來;
本人對sql并不精通,所以捋了一個大致邏輯
首先要得到user表的省市區三個字段的值,我們一般的查詢方式是
SELECT province,city,district FROM `user` WHERE id =1;
這個比較簡單,得到的結果為一行三列的值,如圖:
這是正常的寫法,之后使用這個結果為查詢條件,去查詢地址表中的name即可.
當然想法似乎不錯,但這個查詢出來的結果是分為三段的,并不利于我們后面的查詢,總不能取出結果后再進行處理再查詢吧,這樣太麻煩了,這時候要用到sql的兩個函數,CONCAT_WS和CONCAT,兩個函數的作用是將結果拼接為一個字符串,具體的用法可以自行百度.這里就不多做介紹了:)
所以我們的查詢語句就可以寫成SELECT CONCAT_WS(',',province,city,district) AS ids FROM `user` WHERE id =1;
得到的結果如圖:
有了這個結果我們基本上可以去查詢到地址信息了,同樣的在查詢地址信息的時候我們也做了相應的拼接,所以最終的sql是這樣的
SELECT GROUP_CONCAT(`name`) FROM address WHERE id IN (SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1);
理想中的結果如圖:
但實際上,這個語句并不能得到我們想要的結果,原因是SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1查詢出的結果是一個字符串,而字符串卻不能作為查詢條件中In的條件來使用,所以查詢的結果并不是我們想要的.
再分析下我們的思路并沒有問題,那么怎么才能用這個字符串作為查詢條件,并最終得出我們想要的結果呢?根據網上的資料得知,查詢條件in的內容只能是數字型的,所以他并不支持字符串的查詢,所以這里我們還需要一個函數,instr.說實話這也是我第一次知道這個函數,畢竟對mysql真的只是會一點增刪改查的皮毛,哈哈.那么接下來我們來試試這個函數的效果,最終的sql為
SELECT GROUP_CONCAT(`name`) FROM address WHERE INSTR( (SELECT CONCAT_WS(',', province, city, district) FROM `user` WHERE id = 1), id ) ;
執行后的結果也是我們想要的.當然上邊的語句只是實現了查找到地址的結果,具體的可以根據業務需求繼續修改,mysql的函數不得不說確實很強大.今后還是要多學習才是;
所以,最終的sql為:
SELECT GROUP_CONCAT(`name`) FROM address WHERE INSTR( CONCAT( ',', (SELECT CONCAT_WS(',', province, city, district) FROM `user` WHERE id = 1), ',' ), CONCAT(',', id, ',') ) ;
關于“mysql查詢結果怎么實現多列拼接查詢”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。