本文地址 分享提綱: 1. 事情的背景 2. 解決辦法 3. 總結 1. 事情的背景 現在需要將2000條數據的name,從user表中查詢出來結果,sql 這樣寫 但是出來的查詢結果只有 1997條,說明有3條沒有結果,也有可能是有重覆的name,怎麼查詢出來是哪3個數據沒有結果或者是重覆的數據呢 ...
分享提綱:
1. 事情的背景
2. 解決辦法
3. 總結
1. 事情的背景
現在需要將2000條數據的name,從user表中查詢出來結果,sql 這樣寫
SELECT * FROM user WHERE name IN ( 'name1', 'name2', ... 'name2000' );
但是出來的查詢結果只有 1997條,說明有3條沒有結果,也有可能是有重覆的name,怎麼查詢出來是哪3個數據沒有結果或者是重覆的數據呢?
2. 解決辦法
猜想使用mysql應該也可找到是那3條name沒有結果,只是一時沒有想起來,只好使用了別的辦法了。
解決思路是這樣的:
1)【mysql結果導出】
首先,是將查詢出來的結果1997條的name都存在文本中(mysql已經對name做了排序處理了) mysql.log
2)【查找重覆數據】
然後,將原來的數據,使用shell的命令 sort -u 處理為 sort_unique.log 與原來的文件sort.log(也經過 sort處理) vimdiff就可以看出來,是否有重覆的name, 果然有 1條重覆的name
3)【查找沒有返回值的name】
最後,vimdiff 一下, mysql.log 和 sort_unique.log(兩者實現了同樣的排序) 就可以看出來到底是哪些 name 在數據表 user中沒有返回了
3. 總結
首先就是我的mysql查詢語句需要提高,然後,當一種技術解決不了問題時,可以混合多種技術。
像上面提到的 shell在文本處理,排序,去重,對比中展現的優勢是無與倫比的,比 PHP等語言處理要快很多。
-- 另外:
有知道怎麼直接用 sql語句查詢出來哪些 name沒有結果的同學,也歡迎回覆哈,一起學習交流提高,謝謝~